Considera questo codice:
struct A
{
void foo() const
{
std::cout << "const" << std::endl;
}
private:
void foo()
{
std::cout << "non - const" << std::endl;
}
};
int main()
{
A a;
a.foo();
}
L'errore del compilatore è:
errore: 'void A :: foo ()' è privato`.
Ma quando elimino quello privato funziona. Perché il metodo public const non viene chiamato quando quello non-const è privato?
In altre parole, perché la risoluzione del sovraccarico viene prima del controllo degli accessi? Questo è strano. Pensi che sia coerente? Il mio codice funziona e poi aggiungo un metodo e il mio codice funzionante non si compila affatto.