J'essaye de créer une classe avec deux méthodes avec le même nom, utilisées pour accéder à un membre privé. Une méthode est publique et const qualifiée, l'autre est privée et non-const (utilisée par une classe d'amis pour modifier le membre au moyen d'un retour par référence).fonction de membre const non-const et public - coexistant en paix?
Malheureusement, je reçois des erreurs de compilation (en utilisant g ++ 4.3): Quand j'utilise un objet non-const pour appeler la méthode, g ++ se plaint que la version non const de ma méthode est privée, même si la version existe.
Cela semble étrange, car si la version privée non-const n'existe pas, tout compile bien.
Y at-il un moyen de faire ce travail? Compile-t-il sur d'autres compilateurs?
Merci.
Exemple:
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() */
}
Pourquoi serait-ce un échec? C++ permet la conversion de non-const en const, vis-à-vis d'un paramètre de fonction. – jkeys