You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除拷贝构造函数的抽象基类导致派生类构造报错原因咨询

C++编译报错原因解析

核心规则

在C++11及之后的标准里,只要你显式声明了任何构造函数(包括被删除的拷贝构造函数),编译器就不会自动为类生成默认构造函数。

你的场景拆解

  1. 你在Shape类里写了Shape(const Shape&) = delete;,这属于显式声明了构造函数,因此编译器不会自动生成Shape的默认构造函数Shape()。
  2. 派生类Circle的构造函数(不管是你显式写的,还是编译器自动生成的),在初始化阶段都会默认调用基类Shape的默认构造函数。
  3. 此时Shape没有可用的默认构造函数,编译器就会抛出「无法调用Shape::Shape()」的错误。

为什么删除拷贝构造的删除语句就解决了

当你删掉Shape(const Shape&) = delete;后,Shape类没有任何用户声明的构造函数,编译器会自动为它生成默认构造函数,Circle构造时就能正常调用这个默认构造,编译通过。

内容的提问来源于stack exchange,提问作者Chris Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:22:01