2016-12-28 180 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