Ho riscontrato un problema che non capisco e speravo che qualcuno qui potesse fornire alcune informazioni. Il codice semplificato è il seguente (codice originale era un'implementazione coda di custom/coda iterator):Operatore di assegnazione predefinito nella classe interna con gli elementi di riferimento
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;
}
Questo, quando compilato, mi dà il seguente errore:
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
posso andare in giro questo utilizzando due variabili C separate, in quanto si suppone che siano oggetti "C" indipendenti, ma questo nasconde solo il problema (non capisco ancora perché non posso farlo).
Penso che il motivo sia che il riferimento non può essere copiato, ma non capisco perché. Devo fornire il mio operatore di assegnazione e copiare il costruttore?
Bah, certo che hai ragione, non posso credere di aver perso l'ovvia spiegazione. Dovrebbe avere più caffè al mattino: D – laura
+1. Trovo che usare abitualmente "bind" piuttosto che "assegnare" quando si parla di riferimenti mi aiuti a fare questo errore. –
ora, ho intenzione di riassegnare un riferimento e, naturalmente, verrà compilato: int a = 3; int b = 4; int & ref = a; ref = b ;. Quindi è possibile riassegnare un riferimento. – friko