枚举语法错误:缺少标签名称和常量

时间:2019-02-20 03:25:39

标签: c++

我正在尝试编译在下一行中显示错误的应用程序

enum   ROUTE_STATE
{
        ROUTE_STATE_DOWN    =   0,          
        ROUTE_STATE_UP      =   1,          
        ROUTE_STATE_STANDBY =   2,          
        ROUTE_STATE_DISABLED=   4           
};

分别有四个错误消息

enum ": missing tag name
Syntax error: "constant
Syntax error: missing ";" (before "{")
"{" : missing function title (is it an older form table?)

在以下代码中

namespace   ECON
{
    namespace   FDC
    {
       enum ROUTE_TYPE
       {
          ROUTE_TYPE_RX = 0,                
          ROUTE_TYPE_TX = 1                 
       };
       enum   ROUTE_STATE
       {
          ROUTE_STATE_DOWN      =   0,          
          ROUTE_STATE_UP        =   1,          
          ROUTE_STATE_STANDBY   =   2,          
          ROUTE_STATE_FREE      =   3,          
          ROUTE_STATE_DISABLED  =   4           
       };
    }
}

根据四个错误消息无法找到问题,谢谢帮助

1 个答案:

答案 0 :(得分:2)

阐述“退休忍者”(我同意)的猜测:

宏可能会带来麻烦,尤其是在C ++中,因为它们不考虑任何名称空间。

OP的公开代码没有错。因此,原因一定是在未曝光的地方。

想象一下,在某个地方定义了一个宏

<p-accordion>
   <p-accordionTab>
      <p-header>
         <span>Some card title</span>
         <p-button title="Delete" (onClick)="$event.stopPropagation(); deleteCard()"></p-button>
      </p-header>
   </p-accordionTab>
</p-

#define ROUTE_STATE "free"

这会改变

#define ROUTE_STATE 2

enum ROUTE_STATE {

enum "free" {

真是一团糟。

如何处理?

  1. 您可以在仅预处理模式下运行编译器。例如。 enum 2 { 为此有一个选项-E,其他C ++编译器也提供了这样的选项(但名称可能不同)。这将提供经过预处理的源代码,并向作者揭示这些内容。

  2. 有一些用于命名标识符的约定(样式),有助于降低此类混淆的风险。 因此,宏应仅使用大写字母命名,而其他任何标识符均不能使用大写字母。例如。我更喜欢

    • 类型和枚举值(首字母大写的情况)
    • 变量和函数混合大小写,首先是非大写。

有多种样式指南,但大多数仅涉及大写的宏,而其余大多数则不常见。 (一定有原因。)

也许是值得一提的是,某些甚至广泛使用的API(例如win32)也不符合这个简单但有价值的规则。 (有一次,这使我头痛不已,直到找到原因为止。)