【发布时间】:2023-03-29 11:40:02
【问题描述】:
我有一些代码,这里有一些看起来像这样的代码(我当然简化了)
#define ERROR 0
namespace lib{
class Logger{
public:
typedef enum {ERROR = 1} LogLevel;
};
}
在 Visual Studio 中编译时出现错误:syntax error: 'constant'。很明显,问题在于我将 ERROR 一词重新用于定义和 typedef 枚举。
有谁知道影响某些变量名称的定义的逻辑,这些变量名称实际上包含在命名空间和类中。我的意思是,ERROR 如何与lib::Logger::ERROR 混淆,因为我的猜测是它们具有完全不同的范围。
【问题讨论】:
-
这是一个宏。这意味着编译器看到
ERROR的每个地方都会用0替换它。而且,不,它不会“用 g++ 编译”。其他东西可能会编译,但这段代码不会。 -
主要原因是您在 C++ 中采用了 Java/Python 约定,即常量大写,但它没有意义。
-
−1 用于发布不是真实代码的代码。
-
你是对的@Pete Becker,它不能在 g++ 中编译,我刚刚意识到定义实际上来自一个 Windows 默认包含wingdi.h,它在使用 g++ 编译时不存在。我猜这个预处理器甚至可能会替换变量名。谢谢。
-
namesspaceO RLY?发布您正在使用的实际代码,可能不是那样,否则您会遇到不同的问题。
标签: c++ visual-studio