2016-06-19 2 views
3

У меня есть класс Animal. DiffClass, имеет указатели на класс Animal. Я пытаюсь выяснить, как правильно использовать std::vector вместо new, так как это означает, что мне не нужно самостоятельно удалять память. Я не понимаю, почему вектор не распознает функцию в классе Animal. Любая подсказка?C++ New up std :: вектор указателей

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++. Явная ошибка компиляции слишком очевидна. Пожалуйста, напишите реальный код, а не код. –

+1

@SamVarshavchik: Он спрашивает о ошибке компилятора. –

ответ

2

AnimalPointer является указателем на vector, так AnimalPointer[i] вектор, а не Animal и вызвать display() на нем не будет работать. По той же причине AnimalPointer.size() не будет работать.

Вам не нужно использовать указатель на vector, просто

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; 
};