2010-11-15 158 views
4

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

#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)的地方,这不是” t似乎将警告恢复为默认状态。

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

回答

2
从这里找到

答案:HTTP://connect.microsoft.com/VisualStudio/feedback/details/442051/cannot-suppress-warning-in-template-function

粗略地说,其原因是因为警告在我的代码中生成,而不是在头文件中生成,因为它是模板。它的代码是在头文件中生成的,这种方式是可行的。

+0

但它不到风度解释了为什么替代解决方案1没有工作 – 2010-11-18 04:44:27