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

时间:2017-10-22 01:38:10

标签: c++ pointers inheritance containers

我设置了两个类,如下所示

class A
{}

class B : A
{}

并试图使用一个可以容纳A类任何对象的向量或使用指针的派生类型。我试着这样做:

vector<A*> objectsvar;

B var1();

objectsvar[0] = var1;

// Also tried = *var1;

有没有办法做这种事情?有一个容器可以容纳任何类型A或它的派生类而不会丢失任何东西吗?

2 个答案:

答案 0 :(得分:1)

是的,你可以这样做。不幸的是,正如评论中已经指出的那样,你试图实现它时犯了几个错误:

  • join不会调用默认构造函数,而是声明一个函数。

  • 要向量添加元素,请使用B var1();(或push_backinsertemplace)。在您的情况下,下标操作符尝试访问不存在的元素。

  • 要获取变量的地址,请使用emplace_back&完全相反,它取消引用指针。

你想要的是:

*

答案 1 :(得分:0)

使用统一初始化程序 {}代替:

B var1{};

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