繁体   English   中英

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

[英]Avoiding predefined numeric constants conflicting with enumerations in C++

这个问题与GCC有关,它是由bison在生成的头文件中说“数值常量前的语法错误”, 我遇到了一个关于enum的错误(我认为) ,但是那里的答案仅给出了为什么有人会看到该错误的原因, “错误:数字常量之前的语法错误。” 除非我不加掩饰,否则我看不出任何避免这种问题的好方法(当然只是简单地重命名我们的枚举常量)。 因此,我的问题是:除了简单地重命名枚举常量以避免这种命名冲突外,还有其他(首选)方法可以解决此问题吗? 使用名称空间似乎不起作用。

UPDATE(对于名称空间):我收到此错误:

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;
}

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

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

namespace {
    enum {
        NCC
    }
}

这样编译。

请记住,我假设您确实要重新定义该符号。 如果是这样,那就是您的做法。

在C ++中,可以使用名称空间使它们保持混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM