试图将派生类对象地址分配给基类指针向量

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++ 教科书中阅读&amp; 运算符的地址。 【参考方案1】:

是的,您可以这样做。不幸的是,正如 cmets 中已经指出的那样,您在尝试实现它时犯了几个错误:

B var1(); 不调用默认构造函数,而是声明一个函数。

要将元素添加到向量,请使用push_back(或insertemplaceemplace_back)。在您的情况下,下标运算符尝试访问不存在的元素。

要获取变量的地址,请使用&amp;* 正好相反,它取消引用一个指针。

你想要的是:

vector<A*> objectsvar;
B var1;
objectsvar.push_back(&var1);

【讨论】:

【参考方案2】:

改用统一初始化器

B var1;

在这种情况下,B var1(); 声明了一个函数。

【讨论】:

以上是关于试图将派生类对象地址分配给基类指针向量的主要内容,如果未能解决你的问题,请参考以下文章

最佳实践:将派生类的向量传递给基类向量上的方法

无法将指向派生类函数的指针传递给基类

根据条件将不同的派生类分配给基类[重复]

赋值兼容原则

5继承与派生3-类型兼容规则

将派生类的对象传递给基类