class Base{};
class C;
class A : Base {
unique_ptr<Base> x;
unique_ptr<A> y;
someMethod(){
if (sth) {
x = make_unique<C>(); // error no viable overloaded '=', see below
}
}
}
class B : Base {
A x;
unique_ptr<B> y;
}
class C : Base {
B x;
}
어떻게 해결할 수 있습니까? 클래스의 크기는 결정 가능해야합니다. 그게 내가 아는 전부 야. 호출 할 때 나도 멤버 변수 A x
포인터로 C x
을, 그리고 위의 B와 C를 이동하지만 난 같은 오류를 얻을 것이라고 생각하지만, A.에 대한unique_ptr에서 알려진 변환이 없으므로 앞으로 선언 하시겠습니까?
error: no viable overloaded '='
candidate function not viable: no known conversion from 'unique_ptr<C, default_delete<C>>' to 'unique_ptr<Base, default_delete<Base>>
또한 [CRTP] 사용할 수 있습니다
간단히
C
후A::someMethod()
의 구현을 이동 완전히 예를 들어, (예.cpp
파일로) 정의 된/위키/Curiously_recurring_template_pattern). – Eljay내가 테스트 한 답변이 왜 삭제 되었습니까? 그것은 C 후에 A :: someMethod를 정의 할 필요가 있다고 말했습니다. – Adam
음 ... 여기에는 몇 가지 문제가 있지만, Base는'C'의 private * 기반이기 때문에 컴파일 할 기회가 없습니다. – AnT