Я столкнулся с проблемой, которую я не понимаю, и я надеялся, что кто-то здесь может дать некоторую информацию. Упрощенный код выглядит следующим образом (исходный код представлял собой пользовательскую реализацию очереди / очереди-итератора):
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, поскольку они должны быть независимыми объектами 'C', но это только скрывает проблему (я все еще не понимаю, почему я не могу этого сделать). 1007 *
Я думаю, что причина в том, что ссылка не может быть скопирована, но я не понимаю, почему. Нужно ли предоставлять свой собственный оператор присваивания и конструктор копирования?