这是我早先问过的一个问题。
我在使用论坛建议的复制构造函数时遇到编译错误。

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

最佳答案

这是你想要的吗?

class Beta
{
private:
    int *x;
    int *y;

public:
    Beta() { x = nullptr; y = nullptr; }
    int* getX() { return x; }
    int* getY() { return y; }

};

class Alpha
{
private:
    int a;
    int b;


public:

    Alpha() { a = 0; b = 0; }
    int getA() { return a; }
    int getB() { return b; }
    Alpha( Beta& be) :a{ *be.getX() }, b{ *be.getY() } {}
//It is not copy Constructor. You can't pass const reference here because getX getY returns pointer. So it could break const contract

};



int main()
{
    Beta aBetaObject;
    Alpha a1 = aBetaObject;
    Alpha a2;
    a2 = aBetaObject;

    return 0;

}

关于c++ - 错误消息:具有复制构造函数和重载的赋值运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57029766/

10-10 05:04