以下代码不会抑制任何C4503编译器警告,但它会抑制C4244警告。
#pragma warning(push)
#pragma warning(disable:4503)
#pragma warning(disable:4244)
#include <map>
#include <string>
int main(int argc, char *argv[])
{
class Field;
typedef std::map<std::string, Field * > Screen;
typedef std::map<std::string, Screen> WebApp;
typedef std::map<std::string, WebApp> WebAppTest;
typedef std::map<std::string, WebAppTest> Hello;
Hello MyWAT; // The C4503 error is NOT suppressed
int a;
a = 5.0f; // The C4244 error is suppressed
}
#pragma warning(pop)
请明确解释为什么不禁止C4503警告。注意:可能是由于How can I work around warning C4505 in third party libraries?中引用的类似原因。
我在Windows 7计算机上使用Visual Studio 2008。
答案 0 :(得分:3)
从上下文中不清楚,但也许你有太多#pragma
语句? MSDN说:
The compiler only supports up to 56 #pragma warning statements in a compiland.
答案 1 :(得分:3)
有点奇怪,但只需移除#pragma warning(pop)
即可使用您的确切代码禁用此警告。我不明白为什么。
我应该说我在VS2010 C ++ Express版本上。
答案 2 :(得分:1)
可能会说明显而易见但您可以使用IDE设置完全删除此(和其他)警告,如here所述。
这是唯一对我有用的解决方案,并且在得知Boost内置了警告启用/禁用策略后会证明是合理的,这会改变#pragma push / pop / enable / disable语句的行为。