У меня проблема с областью действия (ошибка неопознанного идентификатора после цикла for) - PullRequest
1 голос
/ 20 января 2011

Я использую 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 ]

2 голосов
/ 20 января 2011

Исправьте отступ (например, gg=G в Vim).

Прямо сейчас у вас есть

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

, где levels очень явно выходит за рамки.

1 голос
/ 20 января 2011

Это должно быть перемещено до условного:

    binaryValNode*** levels;
1 голос
/ 20 января 2011

Сортируйте отступы - это покажет, что у вас тоже есть закрытие}, и, следовательно, после окончания функции main () возникает проблемная строка.

Попробуйте изменить / расширенный / выбор формата

...