2016-06-19 13 views
3

私はAnimalクラスを持っています。 DiffClassは、Animalクラスへのポインタを持っています。 newの代わりにstd::vectorを正しく使用する方法を工夫しています。つまり、自分でメモリを削除する必要はありません。なぜベクトルがAnimalクラスの関数を認識しないのか分かりません。どんな手掛かり?C++ポインタの新しくなった標準::ベクトル

class Animal 
{ 
void display(); //displays one animal 
} 

class DiffClass 
{ 
public: 
    void someFunctionToSetUpVector() 
    { 
    AnimalPointer = new std::vector<Animal>; 
     for (int i = 0; i <AnimalPointer.size(); i++) 
     { 
     AnimalPointer[i].display(); // does not work, can't find function 
     } 
    } 
private: 
    std::vector<Animal>* AnimalPointer = 0; 
} 
+0

このコードは、おそらくこれまで任意のC++コンパイラによって、コンパイルさでした方法はありません、vectorへのポインタを使用する必要はありません。恐ろしいコンパイルエラーはあまりにも明白です。信じられないコードを投稿してください。 –

+1

@SamVarshavchik:彼はコンパイラのエラーについて質問しています。 –

答えて

2

AnimalPointervectorへのポインタであるので、AnimalPointer[i]は、ベクター、ないAnimalあり、それにdisplay()を呼び出す動作しません。同様の理由でAnimalPointer.size()も動作しません。

あなただけ

class DiffClass 
{ 
public: 
    void someFunctionToSetUpVector() 
    { 
     animals.push_back(Animal()); // add one Animal 
     // add more Animals... 

     for (int i = 0; i < animals.size(); i++) 
     { 
      animals[i].display(); 
     } 
    } 
private: 
    std::vector<Animal> animals; 
}; 
関連する問題