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=HEPorts.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(代码)