为什么以下代码无法编译?

时间:2012-02-23 17:17:43

标签: c++

我有以下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();
}

它只是不编译。有人可以解释一下吗?谢谢!

2 个答案:

答案 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成员变量除外)。