簡體   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