我正在建立vector
文件中创建mex
。我需要创建一个vector<vector<int>>
,其大小取决于输入变量。创建或声明部分在if
块中。我需要在if
之外使用此变量。然后它有一个错误“未声明的标识符”。我发现我应该预定义变量。但是我不知道这样的大小。我需要定义一个全局变量吗?或其他建议?我的代码在下面。
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
int i;
if ( i == 0) // if block
{
mwSize Num = mxGetNumberOfElements(prhs[i]);
vector<vector<int>> V0(Num);
}
cout << V0.size()<<"\n"; // error
}
这是简化的示例代码。我真的需要if
块。我认为问题出在可变域。但是我还没有找到解决这个问题的好方法。
答案 0 :(得分:2)
您的直觉是正确的。 V0
的生存期在封闭的if
的右花括号处结束。该对象已销毁,并且在外部作用域中看不到该名称。
您可以通过将其移至if
之外来解决该问题。
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
vector<vector<int>> V0;
int i; // hey, this is uninitialized!
if (i == 0) // if block
{
mwSize Num = mxGetNumberOfElements(prhs[i]);
V0.resize(Num);
}
cout << V0.size() << "\n"; // the vector is visible here
}
答案 1 :(得分:1)
向量V0
在您的if
块中声明,并且仅存在于该范围内。您正在该范围之外访问它。
此外,您还取消了对size()
的呼叫的限制。
答案 2 :(得分:0)
vector< vector<int>> V0(Num);
在if中声明,您正尝试在if
之外使用它。那是问题。