PTB*_*TBG 1 c++ header constants global-variables
我是一名java开发人员,但最近我不得不学习C++而且我对某些事情感到困惑.我想要做的是创建一个'全局'头文件,它有一个#define变量列表,它将在我创建的整个套件中保持不变.我创建了头文件,并添加了一些变量
#ifndef CONSTANTS_H
#define CONSTANTS_H
#define SM_START 1001;
#define SM_PAUSE 1002;
#define SM_STOP 1003;
#define SM_SAVE 1004;
#define SM_DISCARD 1005;
#define SM_SETUP 1007;
#endif // CONSTANTS_H
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法访问这些......
我已经将头文件包含在我需要它的位置,但我无法访问其中的常量.难道我有有一个.cpp文件?有没有办法让我访问常量变量?
第一:你不应该把分号放在最后#define.#define是一个预处理器指令,这意味着它基本上用内容替换定义的名称.因此,如果您执行类似的操作int a = SM_STOP + 1;,则会int a = 1003; + 1;使用您的代码对其进行预处理,这不是您想要的.
第二:标题通常不是自己编译的,而是仅包含在*.cpp文件或其他标题中(其中#include再次是文本替换).因此,是的,你需要在.cpp某个地方有一个文件(不完全是,首先你可以选择一个不同的扩展名,然后你甚至可以给编译器一个标题作为编译单元,但我建议反对它,至少在你知道之前你在做什么).但是,您不需要.cpp为常量提供文件,只需#include将标题放入要使用常量的任何文件中.
第三:为什么在这里使用预处理器定义?对于枚举来说,这似乎是一个完美的工作.然后你可以将它放入命名空间/结构中,以消除为它们添加前缀(with SM_)的需要.或者你可以使用C++ 11的新版本enum class,它的行为与java的枚举非常相似.我会尽可能避免使用预处理器.因为它只是文本替换而且它不尊重任何范围等,这使得容易陷入问题(例如用分号).