我正在使用以下类声明:
class A {
public:
A(int, float);
A(const A&);
};
class B {
public:
B(A&);
protected:
A a;
};
我还为B设置了以下定义:
B::B(A &a) {
this->a = a;
}
问题是我的B
构造函数定义出错,告诉我有No matching function for call to A::A()
。
为什么我的B构造函数会尝试创建一个新的A?
如果需要上一步,为什么不使用引用来调用复制构造函数?
答案 0 :(得分:3)
我认为您的B
需要构建A
。在当前的构造函数中,您没有明确指定要使用的A
构造函数。因此,它会尝试A
的默认构造函数,它不存在:
也许你打算用参考构建B的A?
class B {
private:
A _a;
public:
B(A& a) : _a(a) {}
};