Me he encontrado con un problema que no entiendo y esperaba que alguien aquí pudiera proporcionar alguna información. El código simplificada es la siguiente (código original fue una implementación cola personalizada/cola-iterador):Operador de asignación predeterminado en la clase interna con miembros de referencia
class B
{
public:
B() {};
class C
{
public:
int get();
C(B&b) : b(b){};
private:
B& b;
};
public:
C get_c() { return C(*this); }
};
int main()
{
B b;
B::C c = b.get_c();
c = b.get_c();
return EXIT_SUCCESS;
}
Esto, cuando se compila, me da el siguiente error:
foo.cpp: In member function 'B::C& B::C::operator=(const B::C&)':
foo.cpp:46: error: non-static reference member 'B& B::C::b', can't use default assignment operator
foo.cpp: In function 'int main()':
foo.cpp:63: note: synthesized method 'B::C& B::C::operator=(const B::C&)' first required here
puedo ir alrededor de este usando dos variables C separadas, ya que se supone que son objetos independientes 'C', pero esto solo oculta el problema (todavía no entiendo por qué no puedo hacer esto).
Creo que la razón es que la referencia no se puede copiar, pero no entiendo por qué. ¿Debo proporcionar mi propio operador de asignación y copiador?
Bah, por supuesto que estás en lo cierto, no puedo creer que me haya olvidado de la explicación obvia. Debería haber tomado más café por la mañana: D – laura
+1. Me parece que el uso habitual de "atar" en lugar de "asignar" cuando se habla de referencias me ayuda a cometer este error. –
ahora, voy a reasignar una referencia y por supuesto compilará: int a = 3; int b = 4; int & ref = a; ref = b ;. Por lo tanto, es posible reasignar una referencia. – friko