没有来自unique_ptr,前向声明的已知转换?

时间:2017-12-18 22:39:51

标签: c++ unique-ptr

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 xC 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>>

1 个答案:

答案 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