理解できない問題に遭遇しました。誰かが洞察を提供してくれることを期待していました。簡略化されたコードは次のとおりです (元のコードはカスタム キュー/キュー イテレータの実装でした)。
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変数を使用してこれを回避できますが、これは問題を隠すだけです(なぜこれができないのかまだわかりません)。
理由は参照をコピーできないためだと思いますが、理由がわかりません。独自の代入演算子とコピー コンストラクターを提供する必要がありますか?