簡體   English   中英

枚舉類范圍解析運算符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM