Estoy tratando de crear una clase con dos métodos con el mismo nombre, utilizado para acceder a un miembro privado. Un método es público y const calificado, el otro es privado y no const (utilizado por una clase de amigo para modificar el miembro a modo de retorno por referencia).privado no const y función de miembro público - ¿coexistir en paz?
Desafortunadamente, recibo errores de compilación (usando g ++ 4.3): Cuando utilizo un objeto no const para llamar al método, g ++ se queja de que la versión no const de mi método es privada, aunque sea pública (const) la versión existe
Esto parece extraño, porque si la versión privada no const no existe, todo compila bien.
¿Hay alguna manera de que esto funcione? ¿Se compila en otros compiladores?
Gracias.
Ejemplo:
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() */
}
¿Por qué este fracaso? C++ permite la conversión de non-const a const, vis a vis parámetro de función. – jkeys