【发布时间】:2015-12-20 22:59:47
【问题描述】:
我有一个名为IList 的基础对象。然后我有VectorList,它继承了IList。
然后我有这样的功能:
std::unique_ptr<IList> factory(){
auto vlist = std::make_unique<VectorList>();
return vlist;
}
这在gcc 下编译没有问题,但clang 给出以下错误:
test_file.cc:26:9: error: no viable conversion from 'unique_ptr<VectorList, default_delete<VectorList>>' to
'unique_ptr<IList, default_delete<IList>>'
return vlist;
如何正确处理此类错误?
【问题讨论】:
-
你能提供一个mcve吗?
-
@CoryKramer 这个问题明确说明了这一点。 “我有一个名为
IList的基础对象。然后我有VectorList,它继承了IList。” -
不要忘记虚拟析构函数,以便它与
unique_ptr正常工作。 -
@CoryKramer 这里的重点是
vlist的类型与返回类型不相同。vlist是unique_ptr<VectorList>,返回类型是unique_ptr<IList>。所以标准的那个条款(“先尝试一下”)不适用。
标签: c++ clang c++14 unique-ptr