나는 이해할 수없는 문제에 봉착했으며 여기 누군가가 통찰력을 제공하기를 바랍니다. 다음과 같이 단순화 된 코드는 (원래 코드는 사용자 정의 큐/큐 반복자 구현했다)입니다 :참조 멤버가있는 내부 클래스의 기본 할당 연산자
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
나는이 문제를 갈 수 있습니다
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;
}
이 컴파일 할 때, 나에게 다음과 같은 오류를 제공합니다 두 개의 독립된 C 변수를 사용하여 독립적 인 'C'객체라고 가정하지만이 경우에만 문제가 숨겨집니다 (여전히 왜 내가이 작업을 수행 할 수 없는지 이해할 수 없음).
이유는 참조를 복사 할 수 없다고 생각하지만 이유를 이해하지 못합니다. 나 자신의 할당 연산자와 복사 생성자를 제공해야합니까?
바, 물론 당신 말이 맞아요, 나는 명백한 설명을 놓쳤다는 것을 믿을 수 없습니다. 아침에 커피가 더 있어야합니다 : D – laura
+1. 나는 습관적으로 참조에 대해 이야기 할 때 "할당하다"가 아니라 "묶음"을 사용하는 것이 실수를 저지르는 데 도움이된다는 것을 알게되었습니다. –
이제 참조를 재지 정하고 컴파일 할 것입니다. int a = 3; int b = 4; int & ref = a; ref = b; 따라서 참조를 재 할당 할 수 있습니다. – friko