2011-01-20 22 views
1

我正在使用Visual Studio 2008來做一些問題,並討論了使用C++。我有一個錯誤,我不知道它爲什麼會發生。這是所有的代碼。我有一些範圍問題(for循環後未識別的標識符錯誤)

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 *正確。

謝謝!

代碼:

#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; 
} 

回答

1

這需要移動到前條件:

binaryValNode*** levels; 
1

理清您的壓痕 - 它會告訴你有一個也可能關閉},因此這個問題行主要結束後發生()。

嘗試編輯/高級/格式選擇

2

解決您的壓痕(例如,在gg=G VIM)。

現在你有

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

其中levels很顯然超出了範圍。