我一直在尝试创建一个动态数据结构来保存许多不同类的对象,所有这些对象都派生自同一个基类。 我在很多地方都找到了建议,可以使用共享指针向量来完成此操作。但是我无法让它发挥作用。 代码如下:
class ElementDetail
{
public:
virtual void* getData() = 0;
};
class TypecodeDetail : ElementDetail
{
public:
TypecodeDetail(uint32_t typecode) : _typeCode(typecode) {}
void* getData();
private:
uint32_t _typeCode{};
};
int main()
{
std::vector<std::shared_ptr<ElementDetail>> details;
details.push_back(std::make_shared<TypecodeDetail>());
}
这会在push_back上产生错误:
错误(活动)E0304 没有重载函数的实例与 参数列表 参数类型为:(std::shared_ptr) 对象类型为: std::vectorstd::shared_ptr
>
我已经从我搜索过的许多类似问题的答案中复制了这段代码,但它不起作用。谁能告诉我为什么?我正在尝试的可能吗?
智能指针几乎在所有方面都模仿实际指针。包括通过指向基类的指针处理多态性。
所以回答你的问题:是的,那会起作用。
问题是您尝试默认构造一个
TypecodeDetail
对象,该对象没有默认构造函数。您需要传递 TypecodeDetail
: 所需的实际参数
details.push_back(std::make_shared<TypecodeDetail>(123)); // For example