找不到基类默认构造函数

lin013152 2014-02-27 05:35:31
想封装一个继承了TQRSubDetail的类,方便报表动态创建条目。
.h文件声明了
class MySubDetail:public TQRSubDetail
{
private:
// TQRLabel QRLabel[6];
public:
__fastcall MySubDetail(Classes::TComponent* AOwner);
};
在.cpp文件
__fastcall MySubDetail::MySubDetail (Classes::TComponent* AOwner)
{
// QRLabel[6] =new TQRLabel(this);
}
错误提示:cannot find default constructor to initialze base class 'TQRSubDetail'

自认C++基础--继承 没学好。特来请教.
...全文
184 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin013152 2014-02-28
  • 打赏
  • 举报
回复
上面应该说:构造函数声明和实现写在一起
lin013152 2014-02-28
  • 打赏
  • 举报
回复
我老是想着声明构造 和实现构造必须一样, 声明后面加上:TQRSubDetail(AOwner); 会报错 { expected 。 要是声明和实现这个构造函数都写在.h文件里也能编译过。 Virtual function 'MySubDetail::MySubDetail(TComponent *)' conflicts with base class 'TQRSubDetail' 这个错误是因为我少写了__fastcall 问题总算解决了。
sololie 2014-02-27
  • 打赏
  • 举报
回复
是用当前类的AOwner初始化父类的AOwner 刚好说反了
sololie 2014-02-27
  • 打赏
  • 举报
回复

public: 
__fastcall MySubDetail(Classes::TComponent* AOwner); // 这样声明

// 这样实现
__fastcall MySubDetail(Classes::TComponent* AOwner)
   : TQRSubDetail(AOwner)//表示用父类的AOwner来初始化当前类的AOwner,这并不属于函数声明的部分
{
}
sololie 2014-02-27
  • 打赏
  • 举报
回复
cb6 中编译没有问题

class MySubDetail:public TQRSubDetail
{
private:
     // TQRLabel QRLabel[6];
public:
    __fastcall MySubDetail(Classes::TComponent* AOwner);
};

__fastcall MySubDetail::MySubDetail (Classes::TComponent* AOwner)
   : TQRSubDetail(AOwner)
{
}
lin013152 2014-02-27
  • 打赏
  • 举报
回复
之前写构造__fastcall MySubDetail(Classes::TComponent* AOwner):TQRSubDetail(AOwner); 提示与基类的构造不匹配 继承了VCL类的构造需要和VCL的构造一模一样。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧