我有两个班级
class a {
public:
a(int i);
};
class b {
public:
b(); //Gives me an error here, because it tries to find constructor a::a()
a aInstance;
}
如何获取它以便使用(int i)实例化aInstance而不是尝试搜索默认构造函数?基本上,我想从b的构造函数中控制对构造函数的调用。
答案 0 :(得分:22)
您需要在构造函数初始化列表中显式调用(int):
b() : aInstance(3) {}
其中3是您要使用的初始值。虽然它可以是任何int。有关订单和其他警告的重要说明,请参阅注释。
答案 1 :(得分:3)
使用初始化列表:
b::b() : aInstance(1) {}
答案 2 :(得分:0)
只需使用如下定义的构造函数:
class b {
public:
b()
: aInstance(5)
{}
a aInstance;
};
答案 3 :(得分:0)
前两个答案不起作用。您将类声明放入.h头文件中,并将(成员)函数定义放入.cpp文件中。受访者放置的大括号{}定义了b构造函数块。实际上,没有人会想要那空的。但是,您无法在.cpp中正确定义它,否则编译器将报告“重新定义”错误。 (就像头文件被#包含在多个翻译单元中一样,链接程序也是如此。)由于头文件的目的是可以将它们包含在多个.cpp中,因此上述答案不可行。
答案 4 :(得分:-2)
我认为你应该使用指向'a'的指针,如:
class b {
public:
b() : aInstance(new a(5)) {}
a *aInstance;
};
这样您就可以定义行为。当然,你需要在析构函数中释放* aInstance。