如何解决“ if”块中的“未声明的标识符错误”?

时间:2019-10-08 03:43:13

标签: c++ matlab

我正在建立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块。我认为问题出在可变域。但是我还没有找到解决这个问题的好方法。

3 个答案:

答案 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之外使用它。那是问题。