0

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已经定义?

谢谢。

4

2 回答 2

5

简而言之,const UInt8 HP = hp;没有引入#ifndef HP可以对其做出反应的预处理器标识符。

通过预处理器指令定义的标识符#define和变量的定义是两个不同的东西。预处理器指令在编译器分析代码并识别变量、函数等之前被扩展。因此,变量的定义不能#define成为预处理器的标识符,因为此时已经进行了预处理。

你可以通过写作来克服这个...

#ifndef HP_VAR
  #define HP_VAR
  const UInt8 HP = hp;
#endif
于 2020-07-06T16:13:51.790 回答
3

您混淆了预处理器和编译器。声明 C++ 变量不会在预处理器中定义任何内容。让我们逐行看:

#ifndef HP

这由预处理器处理。失败的唯一方法是通过#define HP或类似。C++ 编译器永远不会看到这一行。

const UInt8 HP = hp;

这是在预处理器完成它的工作由 C++ 编译器处理的。预处理器忽略这一行。

没有直接的方法可以做你想做的事;HP理想的解决方案是以永远不会多次声明的方式安排您的项目。它应该在单个翻译单元中声明,并extern在头文件中公开。

于 2020-07-06T16:11:30.463 回答