2012-02-23 27 views
-2

У меня есть следующий код 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(); 
} 

Он просто не компилируется. Может кто-нибудь дать объяснение? Благодаря!

+3

У вас есть сообщение об ошибке? – talnicolas

+2

Скорее всего, есть сообщение об ошибке от компилятора или компоновщика, который сообщает вам, почему. И вы должны предоставить его, чтобы было легко найти ошибку – Tim

ответ

7

Предположительно, ваш компилятор рассказал вам, почему он не компилируется. Mine сказал:

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).

Либо добавить const классификатор функции, чтобы позволить ему быть вызван const объектов:

void f2() const 
      ^^^^^ 

или удалить const из ссылки, чтобы разрешить изменение - но в данном случае, не делают этого, поскольку f2() не нужно изменять объект.

6

A::f2() необходимо указать const для использования с вашей ссылкой const.

Изменение:

void f2() 

к:

void f2() const 

Вы не можете называть несу- const функции на const объекта. Объявляя функцию как const, вы гарантируете, что она не изменит состояние объекта (за исключением mutable переменных-членов).

Смежные вопросы