C++ 避免预定义的数值常量与C+中的枚举冲突+;

C++ 避免预定义的数值常量与C+中的枚举冲突+;,c++,enums,g++,naming-conventions,C++,Enums,G++,Naming Conventions,这个问题与and有关,但那里的答案只给出了可能出现错误的原因,“错误:数值常量之前的语法错误”。除非我对此加以掩饰,否则我没有看到任何好的解决方案来避免这个问题(当然,除了简单地重命名枚举常量)。因此,我的问题是:除了简单地重命名枚举常量以避免这种命名冲突外,还有其他(更好的)方法来解决这个问题吗?使用名称空间似乎不起作用 更新(对于名称空间): 我得到这个错误: enum.cpp:5:5: error: expected identifier before numeric constant e

这个问题与and有关,但那里的答案只给出了可能出现错误的原因,“错误:数值常量之前的语法错误”。除非我对此加以掩饰,否则我没有看到任何好的解决方案来避免这个问题(当然,除了简单地重命名枚举常量)。因此,我的问题是:除了简单地重命名枚举常量以避免这种命名冲突外,还有其他(更好的)方法来解决这个问题吗?使用名称空间似乎不起作用

更新(对于名称空间): 我得到这个错误:

enum.cpp:5:5: error: expected identifier before numeric constant
enum.cpp:5:5: error: expected ‘}’ before numeric constant
enum.cpp:5:5: error: expected unqualified-id before numeric constant
enum.cpp:7:1: error: expected declaration before ‘}’ token
从该计划中:

#include <sys/ioctl.h>

namespace mine {
  enum test {
    NCC
  };
}

int main(int argc, char** argv)
{ 
  return 0;
}
#define NCC 5

namespace mine {
  enum test {
    NCC
  };
}

int main(int argc, char** argv)
{ 
  return 0;
}

< C++ >中,你可以使用一个命名空间来保持它们不混淆。

我知道的唯一方法是在你的枚举中定义你要重新定义的内容/符号:

#include <sys/ioctl.h>
#undef NCC

namespace {
    enum {
        NCC
    }
}
#包括
#未定义NCC
名称空间{
枚举{
NCC
}
}
这是一份汇编


请记住,我假设你真的想重新定义这个符号。如果是这样的话,你就是这么做的。

请说明名称空间是如何应用的,以便我们能够对其进行诊断。如果是与预处理器符号冲突,名称空间将不会有帮助。现在更新名称空间似乎不起作用。这就是为什么在某些圈子中预处理器被视为有毒的原因。避免使用标头保留的名称。当开发一个与某些枚举一起工作一段时间的大型应用程序,然后突然包含另一个标头(例如sys/ioctl.h)时,这会让人恼火,因为它会破坏一切!开始时很容易避免保留名称。。。但包括几个月后,打破东西是什么原因造成的麻烦。