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之上,但我认为我会得到相同的错误,但对于A.
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>>
答案 0 :(得分:1)
function import(filePath, varName, callback){
//create iframe
//create script tag
//add filepath and onload handler
script.onload = function(){
//retrieve variable and
//trigger callback in parent
};
}
时, C
必须是完整的类型,但在您的代码中std::make_unique()
仅在调用C
时进行了前向声明,因此它不会; t知道std::make_unique()
实际上有多大,所以它可以分配C
。
在std::unique
完全定义后(例如A::someMethod()
文件),只需移动C
的实现,例如:
.cpp