Даже самый простой класс не компилируется «, не был объявлен

#c

#c

Вопрос:

Хорошо, это действительно раздражает. У меня есть (почти) самый простой класс из возможных. Два файла: a.cpp и a.h a.h:

 #ifdef A_H
#define A_H
class a{
  public:
    a();
};
#endif
  

и a.cpp

 #include "a.h"
a::a(){
}
  

и все же он не будет компилироваться:

g a.cpp a.cpp:3: ошибка: ‘a’ не
был объявлен

Очевидно, я делаю что-то не так, но что?

Исправлено, я заменил #ifdef на #ifndef

Ответ №1:

Это потому, что

  #ifdef A_H
  

должен быть

  #ifndef A_H
  

обратите внимание на «n», как в случае, если НЕ определен.

Первый будет компилировать код, только если определен A_H , чего нет, поскольку вы определяете его только в следующей строке.

Ответ №2:

Замените #ifdef на #ifndef , затем повторите попытку.

Есть некоторые IDE, которые я нахожу очень полезными, которые анализируют код во время ввода и отображают «серым» шрифтом код, который не будет скомпилирован, начиная с текущих определений макросов. Более того, запуск

gcc -E

сопровождаемые gcc аргументами, которые вы уже знаете, покажут вам, какой код будет скомпилирован после предварительной обработки (макросы разрешаются препроцессором, начальным этапом набора инструментов компиляции-построения).