我有一些范围问题(for循环后出现未识别的标识符错误)

时间:2011-01-20 04:35:05

标签: c++ visual-studio-2008 scope

我正在使用visual studio 2008来解决一些问题并且使用c ++。我有一个错误,我不知道为什么会发生。这是所有代码。错误发生在该行:

cout<<levels[0][0]->left->value;

有错误:

error C2065: 'levels' : undeclared identifier

这是水平发生的简写:

//declaring it
binaryValNode*** levels;
levels = new binaryValNode** [size];

//adding arrays to the array:
 for(int i = 0;i<size;i++){
     levels[i] = new binaryValNode* [size];
//adding the objects
 for(int k = 0; k <= i ; k++)
 {
     levels[i][k] = new binaryValNode();
 }
//I tested cout here and it works fine
}
//but loses scope here(?)

binaryValNode是一个带有int值的结构,binaryValNode * left和binaryValNode * right。

谢谢!

代码:

#include <iostream>
#include <fstream>
#include "binaryValNode.h"

using namespace std;

int main() {
 int length = 0;
 int size = 0;
 ifstream myReadFile;
 myReadFile.open("input.txt");
 char* c = new char[3];
 if (myReadFile.is_open()) {
 while (myReadFile.getline(c,(size+1)*3)) {
     size++;
     c = new char[(size+1)*3];
 }

 binaryValNode*** levels;
 levels = new binaryValNode** [size];

 myReadFile.clear();
 myReadFile.seekg(0);
 for(int i = 0;i<size;i++){
     levels[i] = new binaryValNode* [size];

     c = new char[(i+1)*3];
     myReadFile.getline(c,(i+1)*3);

     for(int k = 0; k <= i ; k++)
     {
         levels[i][k] = new binaryValNode();
         if(c[3*k] != '0')
         {
             levels[i][k]->value = ((int) c[(3*k)+1]-48) + 10*((int) c[(3*k)]-48);
         }
         else
         {
            levels[i][k]->value = (int) c[(3*k)+1]-48;
         }

         //
         if(i!=0){
             if(k==0){//only left parent
                levels[i-1][k]->left = levels[i][k];
             }
             else if(k==i){//only right parent
                 levels[i-1][k-1]->right = levels[i][k];
             }
             else{
                levels[i-1][k]->left = levels[i][k];
                levels[i-1][k-1]->right = levels[i][k];
             }
         }
     }
 }
}

myReadFile.close();
cout<<levels[0][0]->left->value;
cin.get();
return 0;
}

3 个答案:

答案 0 :(得分:2)

修复缩进(例如,gg=G在Vim中)。

现在你有

int main() {
    // ...
    if (myReadFile.is_open()) {
        // ...
        binaryValNode*** levels;
        // ...
    }
    // ...
    cout << levels[0][0]->left->value;
    // ...
}

其中levels非常明显超出范围。

答案 1 :(得分:1)

整理你的缩进 - 它会显示你也可以关闭},因此问题行发生在main()结束之后。

尝试编辑/高级/格式选择

答案 2 :(得分:1)

这需要在条件之前移动:

    binaryValNode*** levels;