2013-08-29 240 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