'field' was not declared in this scope

Рейтинг: 1Ответов: 1Опубликовано: 28.04.2015
#include <iostream>

using namespace::std;

class game{
private: 
    int i, k, j;

    void rotare(int deg)
    {
        for (i = 0; i < deg; i++) 
            for (j = 0; j < 4; j++)
                for (k = 0; k < 4; j++);
                //  field1[i,j]:=field[n-j+1,i];

    }

public:
    void init(){
        int field1[3][3];
        int field[3][3];
    }

    void draw(){
            for (j = 0; j < 4; j++) {
                for (k = 0; k < 4; k++);
                    cout << field[j][k] << endl;
            }
    }
};

int main(int argc, char** argv) {
    game g2048;
    g2048.init();
    g2048.draw();
    return 0;
}

Выдает ошибку
[Error] 'field' was not declared in this scope

В C++ я ноль, как раз обучаюсь на этом примере. Как это можно исправить?

Ответы

▲ 1

Дело в том, что в методе init вы создаёте локальную переменную field и она не видна вне этого метода (она существует только внутри этого метода).

Поэтому, когда вы пытаетесь обратиться к переменной field в методе draw, вам выдаётся сообщение об ошибке, что поле field не найдено.

Для того, чтобы исправить это, создайте поле field в классе.

Вот простейший пример исправления вашего кода:

#include <iostream>

using namespace::std;

class game{
private: 
    static const int field_size = 4;
    int field[field_size][field_size];

public:
    game() {
        for (int i = 0; i != field_size; ++i) {
            for (int j = 0; j != field_size; ++j) {
                field[i][j] = 0;
            }
        }
    }

    void draw() {
        for (int j = 0; j != field_size; j++) {
            for (int k = 0; k < field_size; k++) {
                cout << field[j][k] << " ";
            }
            cout << endl;
        }
    }
};

int main(int argc, char** argv) {
    game g2048;
    g2048.draw();
    return 0;
}

Добавлен конструктор класса game, который обнуляет массив field при создании объекта класса;

убраны ненужные поля i, j и k (лучше создавать эти переменные внутри методов или циклов);

исправлена ошибка с выводом поля в методе draw (после второго цикла стояла точка с запятой, и поле не могло быть выведено). Рекомендуется всегда использовать фигурные скобки для оформления блоков кода, для того, чтобы избегать подобных ошибок (даже если блок состоит из одной строки).