纯虚拟基类的向量的返回元素

问题描述 投票:0回答:1

我有一个虚拟类Animal,我想将Animal对象存储在一个向量中,并能够通过索引访问此向量中的任何Animal对象。

我声明了我的载体:std::vector <Animal*> anim;

可以使用以下方法添加到我的载体中:>

void Shelter::add_animal(Animal& animal){
    anim.push_back(&animal);
}

但是当我尝试使用以下方式访问我的动物时:

Animal& Shelter::animal(int index){
    return anim[index];
}

我遇到错误。

shelter.cpp:18:28: error: invalid initialization of reference of type ‘Animal&’ from expression of type ‘__gnu_cxx::__alloc_traits<std::allocator<Animal*> >::value_type {aka Animal*}’
     return _anim[index];

我想了解为什么我不能像过去访问矢量一样访问此矢量。谢谢!

我有一个虚拟类Animal,我想将Animal对象存储在向量中,并能够通过索引访问此向量中的任何Animal对象。我声明了我的向量:std :: vector anim; ...

c++ oop vector pure-virtual
1个回答
0
投票

您存储的是动物而不是动物的指针。解引用指针。

Animal& Shelter::animal(int index){
    return *anim[index];
}
© www.soinside.com 2019 - 2024. All rights reserved.