2010-07-12 63 views
1

将std :: map与使用普通的非抛出复制构造函数的类型一起使用时,会为xtree中的不可达代码引发编译器警告/错误(警告级别4,发布模式)。这是因为std :: map在其中有一个try-catch,这有助于在发生异常时维护树的状态,但是编译器会发现,如果存储的元素不存在,catch语句将永远不会被调用扔。这些警告可以通过下面的代码在.cpp文件的顶部,易于抑制:是否有替代方法抑制xtree中不可达代码的警告?

#pragma warning(push) 
#pragma warning(disable:4702) 
#include <xtree> 
#pragma warning(pop) 

是否有办法绕过这个警告/错误不改变警戒线,建设调试,抑制警告,或在地图中使用不同的类型?有没有计划在标准库中改变它?

更新:
也许它是编译器特定的。我正在使用vc7。下面 错误是:

C:\程序Files \ Microsoft Visual Studio .NET中2003 \ VC7 \包括\的XTree(1116):错误C2220:警告视为错误 - 没有 '对象' 文件生成
Ç :\ program files \ microsoft visual studio .net 2003 \ vc7 \ include \ xtree(1116):warning C4702:无法访问的代码

显然xtree被std :: map使用。

+0

这是一个编译器问题,没有“xtree标准库”。 – MSalters 2010-07-13 08:23:24

回答

1

不幸的是,它看起来像是xtree是VC7中map底层实现的一部分,因此减轻它的作用并不大。它看起来像是标准库中的一个bug。

是否有可能使用较新的编译器?我确信可以免费下载更新版本的编译器,也许他们已经解决了这个问题。

如果这不是一种选择,可能是最好的解决办法是包裹包括map到自己的私有头,配有一个注释,你已经发现了#pragma + include <xtree>线(除了一个包括map。这隐藏正常使用的解决方法