用C++新建指向指针的std::vector

3

我有一个动物类。这个DiffClass有指向Animal类的指针。我想弄清楚如何正确地使用std::vector而不是new,因为这意味着我不必自己删除内存。但我不明白为什么向量不认识Animal类中的函数。有什么线索吗?

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

这段代码不可能被任何C++编译器编译通过,编译错误太明显了。请发布真实的代码,而不是虚构的代码。 - Sam Varshavchik
1
@SamVarshavchik:他在询问编译器错误。 - Benjamin Lindley
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接