2016-12-28 56 views
2

當我在Eclipse CDT Indigo和g ++(Debian 4.9.2-10)4.9.2下編譯我的項目時,我有很多警告。從here,它可能會解釋一些Eclipse解析器錯誤,再加上可能的一些外部庫錯誤。如何識別gcc編譯日誌中的警告類型以禁用它?

我會升級Eclipse當然,但我現在不能。

然後我想抑制這些繁瑣的警告。我閱讀手冊here,但我仍然看不到如何確定要設置的選項。我沒有選中Eclipse中的-Wall選項,但沒有任何更改。所有Eclipse警告現在都被禁用。

這是我編譯日誌的pastbin

+0

從命令行使用gcc。 Eclipse已經將編譯器的輸出變成了一個不可逾越的混亂。我什至不能發現它警告什麼。對我來說,這些消息看起來像gcc **錯誤**的碎片,而不是警告。 –

+0

1)我從命令行得到完全相同的結果,2)沒有錯誤關鍵字,3)目標文件被構建並且可執行文件鏈接 – lalebarde

+0

然後'make'裏面的東西必須過濾掉你的編譯器輸出。嘗試運行一個'g ++'命令而不使用'make'。請注意,也沒有'warning'關鍵字。 –

回答

1

它看起來像吃了你的實際警告線。所有的gcc警告至少在其中一行中有「警告」一詞。

編輯一些建立的gcc實際產生類似的消息(「注」行,行,行「從實例化」,「從要求」 ......但沒有實際的「錯誤」或「警告」行)。它看起來像gcc中有一個錯誤。 - 結束編輯。

在所有gcc警告中,我只知道一個與超載有關的警告,並且具有列出候選功能的「note」子消息。警告內容

C++說,這些都是不明確的,即使第一個最壞的轉換比最壞轉換爲第二

更好,它不能被關閉。如果你看到這樣的警告,你的程序是不合規的,你應該修復它。

下面是這種不符合規範的代碼示例。與函數簽名匹配你:

#include <string> 

struct KeyWord 
{ 
    KeyWord(const std::string&); 
    operator std::string&() const; 
}; 

struct A 
{ 
    bool operator() (const std::string&, const std::string&) const; 
    bool operator() (const KeyWord&, const KeyWord&); 
}; 

int main() 
{ 
    A a; 
    std::string s; 
    const std::string r; 
    a(s, r); 
} 

使得第二operator()const解決了這個問題。

+0

好吧,爲您的答案「它不能被關閉」。其餘的,我的MCVE是[here](http://stackoverflow.com/questions/41384434/how-to-solve-ambiguity-in-operator-overloading-embedded-inside-a-struct/41384469#41384469)。我試過你的const解決方案,但沒有成功。因爲它與最初的問題沒有直接關係,所以我爲此開了一個專門的問題。 – lalebarde

+0

現在我明白了。謝謝。 – lalebarde