Почему этот код C ++ не скомпилируется? - PullRequest
4 голосов
/ 02 августа 2011

Видим, что я новичок в C ++. Я подумал, что попробую написать очень простое консольное приложение, которое заполняет 2D-массив и отображает его содержимое.

Но код, который я написал, не скомпилируется.

Некоторые из ошибок, которые я получаю:

ошибка C2065: «ящик»: необъявленный идентификатор
ошибка C2228: слева от .GenerateBox должен быть класс / структура / объединение

Вот мой код:

#include <iostream>
using namespace std;

int main()
{
  Box box;
  box.GenerateBox();
}

class Box
{
private:
  static int const maxWidth = 135;
  static int const maxHeight = 60; 
  char arrTest[maxWidth][maxHeight];

public:
    void GenerateBox()
    {
      for (int i=0; i<maxHeight; i++)
        for (int k=0; k<maxWidth; k++)
        {
          arrTest[i][k] = 'x';
        }

      for (int i=0; i<maxHeight; i++)
      {
        for (int k=0; k<maxWidth; k++)
        {
          cout << arrTest[i][k];
        }
           cout << "\n";
      }
    }
};

Есть идеи, что вызывает эти ошибки?

Ответы [ 5 ]

8 голосов
/ 02 августа 2011

Компилятор C ++ читает исходные файлы за один проход сверху вниз. Вы описали класс Box внизу, после main (), после части, где вы пытаетесь использовать класс. Соответственно, когда компилятор добирается до той части, где вы говорите «Box box;», он еще не видел определения класса и, следовательно, не знает, что означает «Box».

6 голосов
/ 02 августа 2011

Переместите функцию main в конец кода. В частности, вам нужно определить Box, прежде чем ссылаться на него.

Единственный случай, когда вы можете обойтись без предварительной декларации (т.е. class Box;), это когда вы просто используете Box в качестве указателя или ссылки.

5 голосов
/ 02 августа 2011

Вы должны определить Box перед использованием.Поэтому для небольшого теста вы можете поместить определение класса перед основным.

Для более крупных программ вы поместите определения классов в заголовочные файлы .h, которые вы включите в начало ваших исходных файлов.

2 голосов
/ 02 августа 2011

Это связано с предварительным объявлением main ().Используйте main после объявления класса Box.

0 голосов
/ 02 августа 2011

@ Никко прав.Вы должны объявить класс Box перед его использованием.

  • обрезать вставку объявления
  • или сказать компилятору, что вы объявите их позже

попробовать это
extern class Box;
//use box class here
//then define it later as you wish
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...