私は理解できない問題に遭遇しましたが、ここの誰かがある程度の洞察を提供することを望んでいました。次のように単純化されたコードは、(元のコードは、カスタムキュー/キュー・イテレータの実装だった)です:参照メンバーを持つ内部クラスのデフォルト代入演算子
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;
}
これ、コンパイルされたときに、私は次のエラーを与える:
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
私はこの周りに行くことができます独立した 'C'オブジェクトであるはずの2つの独立したC変数を使用することで、問題を隠すだけです(なぜ私はこれを行うことができないのかまだ分かりません)。
私はその理由は、参照をコピーすることはできないと思うが、なぜ私は理解していない。私自身の代入演算子とコピーコンストラクタを用意する必要がありますか?
バー、もちろんあなたは正しいです、私は明らかな説明を逃したとは思えません。朝にもっとコーヒーを持っていたはずです:D – laura
+1。私は習慣的に参照を話すときに私がこのミスをするのを助けるときに "割り当て"ではなく "バインド"を使用することがわかります。 –
今、私は参照を再割り当てしようとしていますが、もちろんそれはコンパイルされます:int a = 3; int b = 4; int&ref = a; ref = b;したがって、参照を再割り当てすることは可能です。 – friko