Sto provando a creare una classe con due metodi con lo stesso nome, utilizzati per accedere a un membro privato. Un metodo è public e const qualificato, l'altro è privato e non-const (utilizzato da una classe friend per modificare il membro tramite return-by-reference).private non const e funzione di membro pubblico const - coesistono in pace?
Sfortunatamente, sto ricevendo errori di compilazione (usando g ++ 4.3): quando si usa un oggetto non-const per chiamare il metodo, g ++ si lamenta che la versione non-const del mio metodo è privata, anche se un pubblico (const) la versione esiste
Questo sembra strano, perché se la versione privata non const non esiste, tutto si compila bene.
C'è un modo per farlo funzionare? Si compila su altri compilatori?
Grazie.
Esempio:
class A
{
public:
A(int a = 0) : a_(a) {}
public:
int a() const { return a_; }
private:
int & a() { return a_; } /* Comment this out, everything works fine */
friend class B;
private:
int a_;
};
int main()
{
A a1;
A const a2;
cout << a1.a() << endl; /* not fine: tries to use the non-const (private) version of a() and fails */
cout << a2.a() << endl; /* fine: uses the const version of a() */
}
Perché questo fallire? C++ consente la conversione da non-const a const, vis a vis parametro della funzione. – jkeys