我正在使用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;
}
答案 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;