【发布时间】:2017-11-08 20:32:26
【问题描述】:
我的代码中有以下错误:
error: allocating an object of abstract class type 'Material'
我不知道如何处理这种情况。
我知道std::make_unique 执行分配,所以它无法分配Material 类型的对象,但我不知道如何更正它。
#include <iostream>
#include <memory>
struct Material
{
Material() = default;
virtual int get_color() const = 0;
};
struct Basic : public Material
{
Basic() = default;
virtual int get_color() const override
{
return 1;
}
};
struct Mix : public Material
{
Mix(const Material& mat1, const Material& mat2)
: mat1_(std::make_unique<Material>(mat1))
, mat2_(std::make_unique<Material>(mat2))
{}
virtual int get_color() const override
{
return mat1_->get_color() + mat2_->get_color();
}
private:
std::unique_ptr<Material> mat1_;
std::unique_ptr<Material> mat2_;
};
int main()
{
auto mix = Mix(Basic(), Basic());
std::cout << mix.get_color() << '\n';
}
【问题讨论】:
-
在
Mix的构造函数中,您想为两个对象(unique_ptrs 指向)动态分配存储空间并在那里复制构造函数的参数是否正确?
标签: c++ inheritance constructor c++14 abstract-class