【发布时间】:2019-11-23 13:36:54
【问题描述】:
这是我之前提出的一个问题。 我使用论坛建议的复制构造函数得到编译错误。
class A
{
private:
int a;
int b;
public:
A() { a = 0; b = 0; }
int getA() { return a; }
int getB() { return b; }
A(const Beta& b) :a{ *b.X() }, b{ *b.Y } {}
};
class Beta
{
private:
int *x;
int *y;
public:
Beta(int a, int b) { x =&a; y = &b; }
int* X() { return x; }
int* Y() { return y; }
};
int main()
{
B aObject;
Alpha a1 = aBObject;
Alpha a2;
a2 = aBObject;
return 0;
}
复制构造函数参数中没有 const Alpha(Beta& be)
Error C2061 syntax error: identifier 'Beta'
Error C2228 left of '.getY' must have class/struct/union
Error C2228 left of '.getX' must have class/struct/union
Error C2679 binary '=': no operator found which takes a right-hand operand of type 'Beta' (or there is no acceptable conversion)
Error C2440 'initializing': cannot convert from 'Beta' to 'Alpha'
Error C2065 'be': undeclared identifier
Error C2535 'Alpha::Alpha(void)': member function already defined or declared
在复制构造函数参数中使用 const Alpha(const Beta& be)
Error (active) the object has type qualifiers that are not compatible with the member function "Beta::getX"
Error (active) the object has type qualifiers that are not compatible with the member function "Beta::getY"
Error C2061 syntax error: identifier 'Beta'
Error C2228 left of '.getY' must have class/struct/union
Error C2228 left of '.getX' must have class/struct/union
Error C2679 binary '=': no operator found which takes a right-hand operand of type 'Beta' (or there is no acceptable conversion)
Error C2440 'initializing': cannot convert from 'Beta' to 'Alpha'
Error C2065 'be': undeclared identifier
Error C2535 'Alpha::Alpha(void)': member function already defined or declared
【问题讨论】:
-
Alpha(const Beta& be)不是复制构造函数。 Beta 需要在 Alpha 使用之前声明。
标签: c++ overloading copy-constructor assignment-operator