2016-10-07 2 views
0

Может кто-нибудь сказать мне, почему следующий код:ошибка: передача «ххх», как «это» аргумент отбрасывает отборочные

#include <iostream> 
using namespace std; 

class Test { 
    int a, b, c; 
public: 
    Test() : a(1), b(2), c(3) {} 
    const void print() {cout << a << b << c;} 
    int sum() {return (a+b+c);} 
}; 

const Test& f(const Test& test) { 
    test.print(); 
    // cout << test.sum(); 
    return test; 
} 

main() { 
    Test x; 
    cout << "2: "; 
    y = f(x); 
    cout << endl; 
} 

дает ошибку компиляции

"error: passing 'const Test' as 'this' argument discards qualifiers"

?

Мой print() способ const, который все, что я понял, был необходим. Для меня (0 комментариев) sum() метод в f() должен дать ошибку, но не метод print(). Если кто-нибудь может указать мне, где я недопонимаю, это было бы здорово.

ответ

3
const void print() 

Это не имеет никакого смысла, вы имели в виду:

void print() const 
+2

Cool username, bro :) –

+2

@ VioletGiraffe Последнее, что я посмотрел, жирафы не могли говорить. –

+3

Фиолетовые могут. Всегда мог. Кто-то редактирует вики! –

3

Вы звоните неконстантную метод print() на константный объект. Метод const таков, что он не может изменить объект, на который он вызван, и это единственный тип методов-членов, которым вы можете вызвать объекты const (чтобы сохранить константу). Константный метода обозначается constпосле списка аргументов методы:

void print() const {cout << a << b << c;}

И да, const void бесполезно, в лучшем случае, просто void все равно.

+0

Спасибо за подробное объяснение и помогите мне увидеть лес через деревья. – Aidenhjj

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