#pragma warning不会抑制警告

时间:2011-11-13 17:27:28

标签: c++ visual-c++ visual-studio-2008 c-preprocessor pragma

我的一个.cpp文件由于第三方标题I #include而生成警告C4275 ...(由于DLL导出类继承自非DLL导出类而触发警告据我所知。)

我添加了一行:

#pragma warning(disable : 4275)

作为我的.cpp文件的第一行,但仍然生成警告。这是在VC ++ 2008上,没有使用PCH。

为什么我的#pragma无效,(除了更改第三方代码外)如何解决此问题?

3 个答案:

答案 0 :(得分:5)

生成预处理文件,您可能会发现其他一些头文件重新启用警告。

答案 1 :(得分:1)

我没有看到此特定警告,但在Visual Studio中,您可以通过项目属性禁用特定警告(即,不是pragma)。以这种方式禁用它们似乎比通过pragma禁用它们“更强”。您可能只为您正在使用的文件执行此操作。

当然,警告经常告诉你一些有用的东西,所以这真的是最后的手段。

答案 2 :(得分:0)

万一有人偶然发现类似我的情况:

如果收到模板代码警告,则需要在包含模板之前禁用该警告,而不是使用它的代码。

示例:

// Disable the warning for size_t to int conversion which would cause a problem on 
// 64 bit systems if the first container had more than 2^32 elements. Disabling it 
// here is considered safe since it is impossible for the source container used in 
// this class ever have that many elements.
#pragma warning(disable : 4267)
#include <myLib/myTemplateDefs.h>
#pragma warning(default : 4267)

// Code which uses the template goes here

在我们的情况下,这是可以接受的解决方案,因为容器涉及存储的数据库表的列名。