C++ 当别名定义为“时,使用ifndef时出现重新定义错误”;const int alias=variable";而不是#定义
我定义了C++ 当别名定义为“时,使用ifndef时出现重新定义错误”;const int alias=variable";而不是#定义,c++,c-preprocessor,ifndef,C++,C Preprocessor,Ifndef,我定义了const UInt8 HE=HE
const UInt8 HE=HE在Ports.h
中的名称空间端口内
。然后我将它包括在ports\u logic.h
和ports\u logic.h
中,在名称空间端口中有以下代码
#ifndef HP
const UInt8 HP = hp;
#endif
但是在编译过程中,它给了我以下错误
除了ifndef
之外,还有什么方法可以帮助我检查const int HP
是否已经定义
谢谢。你把预处理器和编译器弄糊涂了。声明C++变量不定义预处理器中的任何内容。让我们逐行查看:
#ifndef HP
这是由预处理器处理的。失败的唯一方法是定义HP或类似产品。C++编译器从来没有见过这行。
const UInt8 HP = hp;
这是由C++编译器在预处理器完成它之后处理的。预处理器忽略这一行
const UInt8 HP = hp;
没有直接的方法去做你想做的事;理想的解决方案是以HP
不会被多次声明的方式安排项目。它应该在单个翻译单元中声明,并在头文件中显示为extern
。简而言之,const UInt8 HP=HP
不引入处理器前标识符,#ifndef HP
可能会对其作出反应
通过#define
预处理器指令定义的标识符和变量的定义是两件不同的事情。预处理器指令在编译器分析代码并识别变量、函数等之前展开。因此,变量的定义不能定义预处理器的标识符,因为此时已进行预处理
你可以通过写
#ifndef HP_VAR
#define HP_VAR
const UInt8 HP = hp;
#endif
你是否正在引用ports.h的全部内容?像#ifndef#PORTS(端口)H(端口)H(端口)定义(端口)H(端口)endif(代码)