复制构造函数和调用函数

时间:2010-04-17 23:00:50

标签: c++ function constructor copy

我正在尝试在复制构造函数中调用访问器函数,但它无法正常工作。这是我的问题的一个例子:

A.H

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;
};

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;
}

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

error: passing 'const A' as 'this' argument of 'int A::getData()' discards qualifiers

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

2 个答案:

答案 0 :(得分:8)

问题是rhs被声明为const,但getData()未被声明,因此即使rhs调用rhs,也可能会修改getData()应该是const。由于const是一个访问者,它也应该是//accessor for data int getData() const;

{{1}}

答案 1 :(得分:3)

您的“访问者”只能在非const对象上调用,因为它没有标记为const。你应该声明它:

int getData() const;

然后你可以在rhs上调用它,这是一个const引用。