[英]Enum class scope resolution operator
當我嘗試通過g++ test.cc --std=c++14
編譯test.cc時,我收到以下錯誤。
test.cc:5:26: error: expected unqualified-id before numeric constant
Colour colour = Colour::None;
test.cc
#include "state.h"
#include <X11/X.h>
int main(){
Colour colour = Colour::None;
}
state.h
enum class Colour { None, Black, White };
我發現通過#include <X11/Xh>
, None
被定義為常量
#define None 0L /* universal null resource or null atom */
困擾我的是我已經使用了范圍分辨率運算符,即Colour::None
,來指定我所引用的None
,但錯誤仍然存在。
這就是我害怕的生活,它體現了宏可怕的原因。
一旦你#include
d <X11/Xh>
,預處理器就會咀嚼你的源代碼,編譯器就會看到
Colour colour = Colour::0;
這毫無意義。
包含文件后,一個修復是#undef None
。
你問了一個問題嗎?
無論如何,一個可能的方向是重構你的代碼。 我要做的是
a)僅在1個cpp文件中執行“#include <X11 / Xh>”,也許稱之為x11x.cpp。
然后,當你需要使用X11 / Xh代碼的功能時,
2a)在x11x.hpp中添加一個函數聲明(即可能是'void foo1(int)')。
2b)並實現你的'foo1(int)'來調用x11x.cpp中的“X11 / Xh”函數。
應該對性能影響很小。
而現在不幸的宏只會干擾x11.cpp的代碼,所以保持這個代碼很小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.