我正在尝试将一个字符串传递给一个函数,当我在Visual Studio中使用它时工作正常但我需要在eclipse CDT作为我的IDE中运行我的代码。选择eclipse的原因是我需要在linux环境中访问matlab的engine.h,这可以通过eclipse实现。
我正在调用一个函数MputVar2d(x, "x");
,其中x
是vector <vector<double> >
而"x"
是一个字符串。我的函数写在不同的头文件中:
template <typename T>
void MputVar2d(const vector <vector<T> > &var, string name){
extern Engine *ep;
int row = var.size(), col = var[0].size();
mxArray *matlab = mxCreateDoubleMatrix(row, col, mxREAL);
T *pa = mxGetPr(matlab);
for (int j = 0; j < var[0].size(); j++){
for (int i = 0; i < var.size(); i++){
pa[i * row + j] = var[i][j];
}
}
engPutVariable(ep, name.c_str(), matlab);
}
我运行代码时出现以下错误:
Invalid arguments:
Candidates are:
void MputVar2d(const std::vector<std::vector<#0,std::allocator<#0>>,std::allocator<std::vector<#0,std::allocator<#0>>>> &, std::basic_string<char,std::char_traits<char>,std::allocator<char>> &)
我尝试将我的函数作为MputVar2d(x, string("x"));
执行,或者将字符串定义为std::string&
,但它仍然会出错。
答案 0 :(得分:0)
第二个参数是一个非const字符串引用,由错误消息判断。你应该把它变成const string&amp;除非您正在更改函数中的字符串并希望调用者看到更改。
如果您需要更多详情,我会在今天晚些时候详细说明。为了快速修复,只需将函数更改为const string&amp;姓名,你会没事的。