复制构造函数和调用函数

Lan*_*opp 2 c++ constructor copy function

我试图在复制构造函数中调用一个访问器函数,但它不起作用.这是我的问题的一个例子:

class A {

public:
    //Constructor
    A(int d);
    //Copy Constructor
    A(const A &rhs);

    //accessor for data
    int getData();

    //mutator for data
    void setData(int d);

private:
    int data;
};
Run Code Online (Sandbox Code Playgroud)

A.cpp

#include "A.h"

//Constructor
A::A(int d) {
    this->setData(d);
}

//Copy Constructor
A::A(const A &rhs) {
    this->setData(rhs.getData()); 
}

//accessor for data
int A::getData() {
    return data;
}

//mutator for data
void A::setData(int d) {
    data = d;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我收到以下错误:

error: passing 'const A' as 'this' argument of 'int A::getData()' discards qualifiers
Run Code Online (Sandbox Code Playgroud)

如果我rhs.getData()改为rhs.data,那么构造函数工作正常.我不允许在复制构造函数中调用函数吗?有人可以告诉我我做错了什么吗?

Mic*_*zek 8

问题是rhs声明为const,但getData()不是,因此rhs当你调用它时它可能会被修改,即使它rhs被认为是const.作为getData()一个访问者,它也应该是const:

//accessor for data
int getData() const;
Run Code Online (Sandbox Code Playgroud)