我有一个 C++ 抽象基类,需要创建一个数组来存储它的子类对象。我使用指向子类的指针,因为数组的每个成员都需要具有相同的大小。目前我正在声明并初始化我的数组,如下所示:
BaseClass *array[];
...
array =
{
&SubClass1(...),
&SubClass2(...),
...
&SubClass3(...)
};
当我尝试编译时,这给了我以下内容:
warning: taking address of temporary
error: too many initializers for ‘BaseClass* [0]’
这样做的正确方法是什么?
您不能使用临时对象来做到这一点 - 您应该静态、动态地分配对象,或者将它们放入自动存储中。
要静态分配对象,请执行以下操作:
static SubClass1 s1(..);
static SubClass2 s2(..);
static SubClass3 s3(..);
BaseClass *array [] = { &s1, &s2, &s3 };
如果动态分配它们,请考虑使用vector<shared_ptr<T>>
而不是自动释放的“原始”指针:
vector<shared_ptr<BaseClass>> data = {
make_shared<SubClass1>(...)
, make_shared<SubClass2>(...)
, make_shared<SubClass3>(...)
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)