我const UInt8 HE = he;
在. namespace Ports
_ ports.h
然后我把它包含在ports_logic.h
里面ports_logic.h
,里面有下面的代码namespace Ports
#ifndef HP
const UInt8 HP = hp;
#endif
但是在编译期间,它给了我以下错误。
有什么替代方法ifndef
可以帮助我检查是否const int HP
已经定义?
谢谢。
我const UInt8 HE = he;
在. namespace Ports
_ ports.h
然后我把它包含在ports_logic.h
里面ports_logic.h
,里面有下面的代码namespace Ports
#ifndef HP
const UInt8 HP = hp;
#endif
但是在编译期间,它给了我以下错误。
有什么替代方法ifndef
可以帮助我检查是否const int HP
已经定义?
谢谢。
简而言之,const UInt8 HP = hp;
没有引入#ifndef HP
可以对其做出反应的预处理器标识符。
通过预处理器指令定义的标识符#define
和变量的定义是两个不同的东西。预处理器指令在编译器分析代码并识别变量、函数等之前被扩展。因此,变量的定义不能#define
成为预处理器的标识符,因为此时已经进行了预处理。
你可以通过写作来克服这个...
#ifndef HP_VAR
#define HP_VAR
const UInt8 HP = hp;
#endif
您混淆了预处理器和编译器。声明 C++ 变量不会在预处理器中定义任何内容。让我们逐行看:
#ifndef HP
这由预处理器处理。失败的唯一方法是通过#define HP
或类似。C++ 编译器永远不会看到这一行。
const UInt8 HP = hp;
这是在预处理器完成它的工作后由 C++ 编译器处理的。预处理器忽略这一行。
没有直接的方法可以做你想做的事;HP
理想的解决方案是以永远不会多次声明的方式安排您的项目。它应该在单个翻译单元中声明,并extern
在头文件中公开。