2009-10-17 16 views
1

我试图使用使用深度3的嵌套矢量的类成员:编译器随深度的嵌套矢量警告3个或更多

矢量<矢量<矢量>> classVariable_;

不过,我再拿到编译器警告在我的代码时,我尝试做的classVariable_.clear()这样简单的事情:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include /c++/bits/stl_vector.h:在成员函数`std :: vector < _Tp,_Alloc> & std :: vector < _Tp,_Alloc> :: operator =(const std :: vector < _Tp,_Alloc> &)[与_Tp = std :: vector>,_Alloc = std :: allocator>>]': /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_vector.h:715:警告:'__result'可能在此函数中未初始化使用 /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_unin itialized.h:82:warning:'__cur'可能在此函数中未初始化使用 /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_uninitialized.h:82:warning: '__cur'可能在此函数中未初始化使用

奇怪的是,这适用于深度为2的嵌套向量,但深度不超过3或更多。这是否与在stl库中缺少默认的运算符/构造函数有关?

有没有人知道这个清洁的解决方案?我使用cygwin编译这个,但是这不应该对此产生影响。

谢谢。

+0

对不起......我在向量声明中省略了int: vector >> classVariable_; 同样的问题仍然适用。 :-) – bsofman

+0

深入3个层次是个好主意吗?如果不是绝对必要的,你可能想再看看你的方法来消除复杂性 –

+0

bsofman:哦,好的。那么我现在就没有想法了。 :) – bcat

回答

4

如果您实际上是指vector< vector< vector< int> > > classVariable_,那么classVariable_.clear()不应该产生任何警告。可能是this bug

手动禁用警告,或避免深度为3的嵌套矢量,这可能不是一个好主意。

+0

你说得对,这是一个海湾合作委员会的错误。我从gcc 3.4.4升级到4.3.2,警告都没有了。 谢谢! – bsofman

0

如果他们只是警告,我不认为它可以是任何主要的,但警告是_result和_cur未被初始化。

也许尝试清除最低级别的向量和工作你的方式备份?