在类A中使用类B的非默认构造函数会出错?加上默认构造却不真正使用?
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调试过,结果一致