2017-10-22 129 views
0

我有两个类设置如下试图派生类对象的地址赋给基类指针

class A 
{} 

class B : A 
{} 

的载体,并试图有一个可容纳类A的任何物体的向量或它的派生类型使用指针。我试图做:

vector<A*> objectsvar; 

B var1(); 

objectsvar[0] = var1; 

// Also tried = *var1; 

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

+4

'乙VAR1();'声明的函数采取任何参数和返回'B';不是'B'类型的变量。放下包袱。 –

+3

矢量为空; 'objectsvar [0]'访问索引超出范围。 –

+4

阅读您最喜爱的C++教科书中关于'&'运算符的地址。 –

回答

1

是的,你可以做到这一点。不幸的是,已经在评论中指出,你提出了一些失误努力实现它:

  • B var1();不调用默认的构造函数,但声明的函数。

  • 将元素添加到载体中,使用push_back(或insertemplaceemplace_back)。在你的情况下,下标操作者试图访问不在那里的元素。

  • 要获取变量的地址,请使用&*完全相反,它取消了一个指针。

你想要的是:

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

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

B var1{}; 

B var1();声明在这种情况下,一个功能。

相关问题