#include
using namespace std;
class A
{
public:
A(int i){}
};
class B
{
public:
B(){}
private:
//A a; //这里当然通不过,没有可用的构造函数
A a(5); //但是这里也编译通不过,编译器居然把此语句当成一个定义一个函数A a()了,郁闷!
};
void main()
{
B b;
}
我现在想在B类的数据成员中定义A类的对象,但是A类中只有带参数的构造函数,请问如何解决?
在B中定义 A a; 是可以通过的,但在其他地方(比如函数中)这样是不对的。在B中定义 A a; 只是告诉编译器:“B有一个A类的对象”,并不在定义的时候创建a这个对象成员,也就不考虑它的构造函数。a这个对象成员的创建是在执行B的构造函数时进行的,B的构造函数后面必须以初始化表的形式为a对象成员提供参数,比如B( ) : a( 1 ) { }如果在构造函数中不为a提供参数,会发生错误。在其他地方(比如函数中)定义A的对象时,必须定义成 A a(参数);的形式。因为定义时就要创建A的对象,所以要考虑它的构造函数。你的程序出现错误不是因为在B中定义 A a;引起的。是因为:1、你定义了A a(5)。这是不行的