У меня есть этот простой классКак это «это» указатель используется в качестве аргумента функции члена
class foo {
public:
void func() const;
void func2();
};
void foo::func() const {}
void foo::func2() {}
int main() {
const foo f;
f.func();
f.func2();
}
При попытке компиляции я получаю сообщение:
error: passing ‘const foo’ as ‘this’ argument of ‘void foo::func2()’ discards qualifiers [-fpermissive]
Я понимаю, использование не-const-члена объекта const, мой вопрос в том, как это «этот» указатель, используемый в качестве аргумента для func2?
Измените 'const foo f;' на 'foo f' и" f.func2() "должно компилироваться в порядке. В противном случае изменение функции func2() на "const" также должно устранить проблему. В любом случае * любое * время, когда вы вызываете метод объекта, вы передаете «этот» указатель. Поскольку вы объявили объект f "const", а поскольку func2() не const ... компилятор жалуется. – paulsm4