#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
аргументами, которые вы уже знаете, покажут вам, какой код будет скомпилирован после предварительной обработки (макросы разрешаются препроцессором, начальным этапом набора инструментов компиляции-построения).