我有两个类设置如下试图派生类对象的地址赋给基类指针
class A
{}
class B : A
{}
的载体,并试图有一个可容纳类A的任何物体的向量或它的派生类型使用指针。我试图做:
vector<A*> objectsvar;
B var1();
objectsvar[0] = var1;
// Also tried = *var1;
有没有办法做这种事情?有一个容器可以容纳任何类型的A或它的派生类而不会丢失任何东西?
我有两个类设置如下试图派生类对象的地址赋给基类指针
class A
{}
class B : A
{}
的载体,并试图有一个可容纳类A的任何物体的向量或它的派生类型使用指针。我试图做:
vector<A*> objectsvar;
B var1();
objectsvar[0] = var1;
// Also tried = *var1;
有没有办法做这种事情?有一个容器可以容纳任何类型的A或它的派生类而不会丢失任何东西?
是的,你可以做到这一点。不幸的是,已经在评论中指出,你提出了一些失误努力实现它:
B var1();
不调用默认的构造函数,但声明的函数。
将元素添加到载体中,使用push_back
(或insert
,emplace
或emplace_back
)。在你的情况下,下标操作者试图访问不在那里的元素。
要获取变量的地址,请使用&
。 *
完全相反,它取消了一个指针。
你想要的是:
vector<A*> objectsvar;
B var1;
objectsvar.push_back(&var1);
使用统一初始化{}
代替:
B var1{};
说B var1();
声明在这种情况下,一个功能。
'乙VAR1();'声明的函数采取任何参数和返回'B';不是'B'类型的变量。放下包袱。 –
矢量为空; 'objectsvar [0]'访问索引超出范围。 –
阅读您最喜爱的C++教科书中关于'&'运算符的地址。 –