2015-09-03 7 views
0

Я пытаюсь выполнить следующий код:не удается преобразовать из «сопзЬ Int» в «межд &»

#include <iostream> 
using namespace std; 

class A 
{ 
    int x; 
public: 
    A(int i = 25) { x = i; } 
    int &f() const { return x; } 
}; 

int main() 
{ 
    A a(15); 
    cout << a.f(); 
    return 0; 
} 

Он создает объект с именем a, и значение его x элемента устанавливается в 15 Однако, когда я пытаюсь вызвать функцию для возврата этого значения, я получаю сообщение об ошибке. Почему это происходит?

ответ

0

const Функция-член не будет изменять внутренние элементы. Если вы вернете ссылку на int, int&, который может изменить x, вы даете возможность изменить значение, которое противоречит.

6

You're пытается вернуть ссылку на x, что означает, как там
возвращаемые могут быть использованы для изменения x в объекте класса.

Однако метод const, то есть не разрешается изменять что-либо в его собственном объекте.

Вы видите это противоречие?
Либо вернуть нормальное значение без ссылки или удалить const

+2

или добавить сопзЬ перед – m47h

2

Вы пытаетесь вернуть ссылку (который может быть изменен) от функции члена отмечены const т.е. она не может изменить экземпляр класса. Удалите завершающий const, и он будет работать. Или верните ссылку const.

0

Удалить ссылку из типа возвращаемого

int f() const { return x; } 

Кроме того, правильный способ построения является

A(int i = 25) : x(i) {} /// Initialization list 
Смежные вопросы