我有以下C ++代码:
#include <iostream>
#include <vector>
using namespace std;
class A
{
private:
int i;
public:
void f1(const A& o);
void f2()
{
cout<<i<<endl;
}
};
void A::f1(const A& o)
{
o.f2();
}
它只是不编译。有人可以解释一下吗?谢谢!
答案 0 :(得分:7)
据推测,你的编译器告诉你它为什么不编译。我说:
In member function ‘void A::f1(const A&)’:
passing ‘const A’ as ‘this’ argument of ‘void A::f2()’ discards qualifiers
这告诉我您正在尝试在对const
对象(A::f2
)的引用上调用非const
成员函数(const A& o
)。< / p>
向函数添加const
限定符以允许在const
个对象上调用它:
void f2() const
^^^^^
或从引用中删除const
以允许修改 - 但在这种情况下,请不要这样做,因为f2()
不需要修改对象。
答案 1 :(得分:6)
A::f2()
需要在const
引用中声明const
。
变化:
void f2()
为:
void f2() const
您无法在const
对象上调用非const
函数。通过将函数声明为const
,您可以保证它不会更改对象的状态(mutable
成员变量除外)。