尝试定义派生自抽象类的类类型的对象时出错
Error when trying to define object of class type that is derived from an abstract class
class Road {
private:
std::vector<Vehicle*> container;
public:
std::vector<Vehicle*> getContainer(){
return container;
}
virtual void operator+(Vehicle *vehicle)=0;
};
class Highway: public Road {
public:
virtual void operator+(Vehicle *vehicle) {
getContainer().push_back(vehicle);
}
};
为什么在覆盖所有虚函数时出现无法分配抽象类型的对象的错误?当我尝试在主课上调用Road r = Highway();
时,就会发生这种情况。
对于Road r = Highway();
,Road r
意味着您正在尝试定义一个类型为 Road
的对象,这是一个抽象类,则不允许定义。初始值设定项列表部分(即 = Highway()
)不影响r
的类型,它只是意味着r
是从类型Highway
的临时对象初始化的切片副本。
您应该使用带有抽象类类型的指针/智能指针或引用,例如
Road* r = new Highway;
// using r ...
delete r;
或
Highway h;
Road& r = h;
// using r ...
相关文章:
- 访问者访问变体并返回不同类型时出错
- 与 tesseract::TessBaseApi() 相关的 Tesseract-OCR 出错(预期的类型说明符)
- 将类指针类型转换为键时出错
- 在 Rcpp 中的字符串类型之间转换时出错
- 为什么双精度数据类型在C++中出错?
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- 将运算符<<与隐式转换的非基本数据类型一起使用时出错
- 缺少类型说明符 - int 假定 声明静态成员后出错
- 确定输入"conscalc: calc"的类型时出错。不能联合编码器。具有不同字段集的结构类型
- 使用 mex 编译库时出错 - __int 64 未命名类型
- 为什么当我们把变量"u"的数据类型从长整型更改为整型时,模幂会出错?
- 在给定表达式的情况下返回对类型的引用时出错:“cond ?*这个 : 投掷()'
- 使用类作为向量类型时出错 - "Undeclared identifier"
- 为 freebsd 11 编译 gcc4.8.5 时出错: 错误: 未知类型名称 'choke'
- 传递具有依赖嵌套参数类型的模板模板参数时出错
- 运算符重载时出错(错误:"运算符<<不匹配(操作数类型为"std::basic_ostream<char>"和"const char [2]")
- 推导成员函数包装器的返回类型时出错
- c++中的字符串库出错:libc++abi.dylib:终止,类型为std::out_of_range:basic_st
- 删除时出错:表达式必须是指向完整对象类型的指针
- 条件表达式解析新表达式中详细阐述的类型说明符时出错