试图将派生类对象地址分配给基类指针向量
Posted
技术标签:
【中文标题】试图将派生类对象地址分配给基类指针向量【英文标题】:Trying to assign derived class object address to vector of base class pointers 【发布时间】:2017-10-22 01:38:10 【问题描述】:我有两个类设置如下
class A
class B : A
并且试图拥有一个可以容纳任何 A 类对象或其使用指针的派生类型的向量。我试着做:
vector<A*> objectsvar;
B var1();
objectsvar[0] = var1;
// Also tried = *var1;
有没有办法做这种事情?拥有一个可以容纳任何类型 A 或其派生类而不丢失任何东西的容器?
【问题讨论】:
B var1();
声明一个不带参数并返回B
的函数;不是B
类型的变量。删除括号。
向量为空; objectsvar[0]
访问越界索引。
在你最喜欢的 C++ 教科书中阅读&
运算符的地址。
【参考方案1】:
是的,您可以这样做。不幸的是,正如 cmets 中已经指出的那样,您在尝试实现它时犯了几个错误:
B var1();
不调用默认构造函数,而是声明一个函数。
要将元素添加到向量,请使用push_back
(或insert
、emplace
或emplace_back
)。在您的情况下,下标运算符尝试访问不存在的元素。
要获取变量的地址,请使用&
。 *
正好相反,它取消引用一个指针。
你想要的是:
vector<A*> objectsvar;
B var1;
objectsvar.push_back(&var1);
【讨论】:
【参考方案2】:改用统一初始化器 :
B var1;
在这种情况下,B var1();
声明了一个函数。
【讨论】:
以上是关于试图将派生类对象地址分配给基类指针向量的主要内容,如果未能解决你的问题,请参考以下文章