我正在尝试在复制构造函数中调用访问器函数,但它无法正常工作。这是我的问题的一个例子:
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
,那么构造函数可以正常工作。我不允许在复制构造函数中调用函数吗?有人可以告诉我我做错了吗?
答案 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引用。