如何解决试图引用已删除的函数的Visual C ++ 17错误C2280
我试图将最初用C#编写的Bencode库移植到C ++。
抽象基类
class BObjectBase
{
protected:
BObjectBase() = default;
public:
virtual std::shared_ptr<BObjectBase> GetParent() = 0;
};
抽象派生模板类
template<typename T>
class BObjectValue : public BObjectBase
{
protected:
BObjectValue() = default;
public:
virtual T GetValue() = 0;
};
通用派生类
template<typename T>
class BObject : public BObjectValue<T>
{
private:
const std::shared_ptr<BObjectBase> parent;
const T value;
protected:
BObject(const std::shared_ptr<BObjectBase> p,const T v) : parent(p),value(v)
{
}
public:
std::shared_ptr<BObjectBase> GetParent()
{
return parent;
}
T GetValue()
{
return value;
}
};
代表Bencoded整数的类
class BInteger : public BObject<long>
{
public:
BInteger(
const std::shared_ptr<BObjectBase> parent,const long value)
: BObject<long>(parent,value)
{
}
};
代表Bencoded字符串的类
class BString : public BObject<std::vector<std::byte>>
{
public:
BString(
const std::shared_ptr<BObjectBase> parent,const std::vector<std::byte> value)
: BObject<std::vector<std::byte>>(parent,value)
{
}
};
代表Bencoded列表的类
class BList : public BObject<std::vector<std::unique_ptr<BObjectBase>>>
{
public:
BList(
const std::shared_ptr<BObjectBase> parent,const std::vector<std::unique_ptr<BObjectBase>> value)
: BObject<std::vector<std::unique_ptr<BObjectBase>>>(parent,value)
{
}
};
两个类BInteger和BString都可以编译,但是BList失败。 双击错误会导致出现xmemory文件。
当我从unique_ptr切换到raw时,它会合规,这是我要避免的事情。
从早上开始,我就一直坚持下去。我是C ++的新手。这个想法是用C ++重写整个过程来学习C ++。
编译器-Microsoft VC ++在VS2019上设置为C ++ 17
严重性代码描述项目文件行抑制状态
错误C2280'std :: unique_ptr
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。