Что может вызвать эту ошибку при объявлении объекта внутри класса? - PullRequest
1 голос
/ 22 мая 2010

Я борюсь с этим заданием:)

У меня есть два класса: Океан и Сетка.

Когда я объявляю объект Решетки в океане:

unsigned int sharkCount;
Grid grid;

Компилятор / жалобщик говорит:

error C2146: syntax error : missing ';' before identifier 'grid'


Можете ли вы предсказать, что вызывает эту ошибку, с помощью предоставленной мною ограниченной информации?

Кажется, что Океану не нравится класс Grid. Может ли это быть из-за плохой реализации класса сетки. Кстати, у Grid есть конструктор по умолчанию.

И все же ошибка возникает во время компиляции!.

РЕДАКТИРОВАТЬ: каждый из них находится в отдельном заголовочном файле, и я включил Grid.h в Ocean.h.

Ответы [ 3 ]

2 голосов
/ 22 мая 2010

Нам нужен остальной источник, но есть несколько возможных ответов:

  • Сетка перегружается чем-то через макрос (#define)
  • Сеткаопределение класса не включено.
2 голосов
/ 22 мая 2010

Моим первым предположением будет то, что определение Grid просто не видно в тот момент, когда вы пытались использовать его в Ocean. Как правило, это происходит, если у вас есть каждый в отдельном файле, и вы не использовали заголовок, чтобы позволить каждому быть «видимым» другим.

1 голос
/ 22 мая 2010

Чтобы использовать Grid в вашем другом классе, вам нужно либо включить заголовок Grid в заголовок, либо сделать предварительное объявление класса и объявить его как указатель в вашем классе, а затем создать его экземпляр в вашем.файл cpp.

class Grid;

class Ocean {
   Grid* grid;
};

или предпочтительно:

class Ocean {
    boost::shared_ptr<Grid> grid;
};
...