2013-02-02 22 views
2

如果我建立並運行一個項目,基本上是在Mac OS 10.6 Qt框架生成的存根,我得到這個錯誤輸出:錯誤「標記不是在一個預處理子表達式一個有效的二進制運算符」

/Users/home/Qt5.0.1/5.0.1/clang_64/include/QtCore/qisenum.h:53: Error:token is not a valid binary operator in a preprocessor subexpression 
# if __has_extension(is_enum) 
    ~~~~~~~~~~~~~~~^ 

我找不到解決方案,雖然我讀過其他Mac用戶似乎有同樣的問題。任何人都知道如何解決此問題?

+0

也許宏'__has_extension'沒有爲'is_enum'實現或者你需要找到的定義。試試'grep'。 –

+0

非常感謝這個提示,但是在QT Core的代碼中進行破解真的合理嗎? – dan

回答

1

我找到了解決方案。只需複製最新的qisenum.h文件from here並將其替換爲您的Qt創建者安裝中的clang_64/include/QtCore文件夾,它將正常工作。

0
# if __has_extension(is_enum) 
     ~~~~~~~~~~~~~~~^ 

這是一個叫做feature checking macroslanguage extension。對於Clang,他們已經有很長一段時間了。 GCC從GCC 5.0,IIRC開始提供它們。

__has_extension可以作爲預處理宏測試。所以,你測試的第一個宏觀的存在,然後測試該功能:

#if defined(__has_extension) 
# if __has_extension(is_enum) 
    ... 
# endif 
#endif 

__has_extension(is_enum)必須在單獨一行。

它也適用於包含文件。從加密++項目的rdrand.cpp file

# include <immintrin.h> // rdrand, MSC, ICC, and GCC 
# if defined(__has_include) 
# if __has_include(<x86intrin.h>) 
# include <x86intrin.h> // rdseed for some compilers, like GCC 
# endif 
# endif 
相關問題