C++ 无法禁用由Boost库引起的警告

C++ 无法禁用由Boost库引起的警告,c++,boost,suppress-warnings,C++,Boost,Suppress Warnings,我试图消除项目中的警告,以便打开将警告视为错误的标志。该项目使用boost库,特别是Concept_check.hpp和cuthill_mckee_ordering.hpp文件。4510和4610警告显示在concept_check.hpp文件中,我尝试使用#pragma warning push and pop禁用它们。这些警告是由于boost库试图使用concept_check.cpp中的模板实例化一个类,但没有为该类编写构造函数 我的问题是:是否有一种更可靠的方法可以在不修改boost代码

我试图消除项目中的警告,以便打开将警告视为错误的标志。该项目使用boost库,特别是Concept_check.hpp和cuthill_mckee_ordering.hpp文件。4510和4610警告显示在concept_check.hpp文件中,我尝试使用#pragma warning push and pop禁用它们。这些警告是由于boost库试图使用concept_check.cpp中的模板实例化一个类,但没有为该类编写构造函数


我的问题是:是否有一种更可靠的方法可以在不修改boost代码的情况下禁用这些警告?我正在使用VisualStudio2010

也许你看错了方向。正如艾伦·斯托克斯指出的那样,这一警告是有原因的。我有三个提示可能不是您期望的答案,但可能会带来一个可接受的解决方案:

  • 与其使警告静音,只需修复错误。我不知道你的代码,但是有一个类似的问题,可以通过声明一个变量来解决

  • 另一个问题是:为什么要将所有警告变成错误?真的有必要吗?我同意普通代码应该总是在没有警告的情况下编译。但这些警告并非源于您自己的代码。考虑一个警告你关于编译器不了解的问题。

  • 如果您必须使用
    -WX
    ,请将有问题的代码移动到静态对象/库/模块中,这样您只在需要重新编译此模块时才会担心警告。您可以为此模块使用特定的编译选项,以完全消除警告


  • 还有另一种可能性,但我无法检查它是否真的有效。根据,可以设置特定警告的警告级别。(也有类似的例子)。首先,将所有警告切换为错误:

    /WX
    
    然后,将两个违规警告的警告级别设置为零:

    /W04510 /W04610
    
    完整的命令行如下所示:

    cl source.cpp /WX /W04510 /W04610
    
    最好的解决方案是将其与上面的提示3结合起来。这样,特定的编译器选项只用于引起警告的文件。

    解决方案可能有效


    您可以禁用.h文件中的特定警告(#pragma warning(disable:…).

    使用不存在的构造函数实例化类是一个错误。这不是警告的意思。请显示实际代码和收到的实际警告。不幸的是,在这种情况下,此策略对我不起作用。通常是我抑制警告的方法,但由于某种原因,在这里它对我不起作用。