2013-08-29 190 views
-1

我愿做这样的事情,假设LionSeal是类Animal的子类:C++:指针矢量元素

class Zoo 
{ 
public: 
    Zoo(std::vector<Lion> lions1, std::vector<Seal> seals1) : lions(lions1), seals(seals1) 
    { 
     unsigned int i; 
     for (i=0; i<lions.size(); ++i) 
     { 
      animals.push_back(&(lions[i])); 
     } 
     for (i=0; i<seals.size(); ++i) 
     { 
      animals.push_back(&(seals[i])); 
     } 
    } 

private: 
    std::vector<Animal*> animals; 
    std::vector<Lion> lions; 
    std::vector<Seal> seals; 
}; 

这似乎并没有工作。在我看来,它不起作用,当我做animals.push_back(&(lions[i]));animals.push_back(&(seals[i]));,指针有问题。任何想法为什么?

在此先感谢!

+0

什么是错误? –

+0

试试'animals.push_back(&seals [i]);'也有点说明为什么它不起作用会有帮助。 – Chemistpp

+3

我想知道“这似乎不起作用”的意思,(在程序开始时没有编译?崩溃?)。为什么不发布Animal,Lion和Seal声明呢?总之,给我们一些*再现*问题*([SSCCE](http://www.sscce.org))。我对动物,狮子和印章有怀疑,但是如果没有看到可编译的代码就不能验证它。 – WhozCraig

回答

1

我看到的问题是,这些指针是指向中的动物,它们既可以是狮子座的矢量,也可以是密封件的矢量。如果任一矢量因其增长而重新分配(当其大小达到其容量时),指针变得无效。

+0

你是对的。我认为在'push_back'之后它们不会被重新分配,因为我已经'保留'了正确的大小,但是事实证明,在第一个'push_back'之后,即使在保留之后,也会重新分配一个空向量。 – Seub