4

环境:Visual Studio 警告级别设置为 4,解决方案中唯一文件中的代码:

#pragma warning( push )
#pragma warning( disable: 4503 )
#pragma warning( disable: 4702 )
#include <boost/property_tree/ptree.hpp>
#pragma warning ( pop ) //mark

#include "iostream"

int main()
{
boost::property_tree::ptree pt;
for( boost::property_tree::ptree::const_iterator it = pt.begin();
     it != pt.end();
     ++it )
    {
    std::cout << it->second.data() << '\n';
    }

return 0;
}

问题:编译时仍然出现警告 4503。我尝试过的其他东西:

  1. 将带有'//mark'的行作为应用程序的最后一行,没有效果。
  2. 如果我在没有推送/弹出的情况下使用#pragma 警告(禁用:4503 4702),它可以工作,但它会影响之后为整个解决方案编译的内容,即使我将#pragma 警告(默认值:xx)放在某处,它似乎也没有将警告设置回默认状态。

谁知道为什么会发生这种情况以及在 Visual Studio 中抑制警告的最佳解决方案是什么。干杯。

4

1 回答 1

2

从这里找到答案:http://connect.microsoft.com/VisualStudio/feedback/details/442051/cannot-suppress-warning-in-template-function

粗略地说,原因是因为在我的代码中生成的警告不在头文件中,因为它是模板。如果代码是在头文件中生成的,那么这种方式会起作用。

于 2010-11-18T04:43:36.213 回答