Я написал код, когда один класс имеет только постоянный доступ к своему содержимому, и он был унаследован другим классом, который предоставляет тот же метод, но с обычным доступом к его членам.Когда я пытаюсь скомпилировать его с помощью gcc, я получаю следующий код ошибки:
error: passing ‘const A’ as ‘this’ argument of ‘void A::operator()()’ discards qualifiers
вот пример скомпилированного кода:
#include<stdio.h>
class ConstA {
public:
void operator()() const {
printf("const\n");
}
};
class A : public ConstA {
public:
void operator()() {
printf("non-const\n");
}
};
class B : public A {
};
void f(const A& a) {
a();
}
int main() {
B b;
f(b);
}
Компилятор пытается вызвать метод (operator ()) безатрибут, а метод const доступен в базовом классе ConstA.Я не знаю, почему я получаю такую ошибку.