#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'没有 已被宣布
显然,我做错了什么,但是什么?
修正了,我用#ifndef替换#ifdef
答案 0 :(得分:15)
将#ifdef
替换为#ifndef
,然后重试。
我发现有些IDE非常有用,它们会在您键入时解析代码,并以“灰色”字体显示不会编译的代码,如当前的宏定义。而且,运行
gcc -E
后面跟着你已经知道的gcc
个参数,它会告诉你在预处理之后要编译的代码是什么(宏由预处理器解析,这是编译构建工具链的初始步骤)。
答案 1 :(得分:15)
因为
#ifdef A_H
需要
#ifndef A_H
注意“n”,如果没有定义。
如果定义了A_H,前者只会编译代码,因为你只在下一行定义它。