在类A中使用类B的非默认构造函数会出错?加上默认构造却不真正使用?

netxray 2002-12-14 11:11:22
class定义如下:
#include "iostream"
using namespace std;
class LOWCLASS
{
public:
LOWCLASS() { cout<<"O~~~~"<<endl; }
//没有这行会出错,但是其实也没调用这个默认构造函数
LOWCLASS(int i, int j) { cout<<"low constructor"<<endl; }
~LOWCLASS() { cout<<"low deconstructor"<<endl; }
};
class TOPCLASS
{
public:
TOPCLASS() { LOWCLASS m_low(10, 20); };
~TOPCLASS();
private:
LOWCLASS m_low;
};
void main(void)
{
LOWCLASS low1(10, 20);//构造函数本身没错
}
我的类lowclass没有默认构造函数时,想在topclass初始化这个成员总编译出错,系统提示error C2512: 'LOWCLASS' : no appropriate default constructor available
因为考虑lowclass对我来说,用默认构造函数构造“空”对象没有意义,所以我一直不写默认构造函数,而且从语义上说没有错。为了使编译通过,我不得以加上了默认构造,可惜,通过调试输出来看,系统并没有调用这个默认构造,这是为何?
VC6,Dev-CPP 4.9.7调试过,结果一致
...全文
30 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
netxray 2002-12-15
  • 打赏
  • 举报
回复
呵呵,忘了成员初始化列表了,没想除了对引用,和const,对没有默认构造函数的也有用。。。
CCLIS 2002-12-14
  • 打赏
  • 举报
回复
#include "iostream"
using namespace std;
class LOWCLASS
{
public:
LOWCLASS() { cout<<"O~~~~"<<endl; }
//没有这行会出错,但是其实也没调用这个默认构造函数
LOWCLASS(int i, int j) { cout<<"low constructor"<<endl; }
~LOWCLASS() { cout<<"low deconstructor"<<endl; }
};
class TOPCLASS
{
public:
TOPCLASS() :m_low(10, 20){};
~TOPCLASS();
private:
LOWCLASS m_low;
};
void main(void)
{
LOWCLASS low1(10, 20);//构造函数本身没错
}

试试看。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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