【发布时间】:2020-08-17 21:17:04
【问题描述】:
在向其添加序列化类后,我正在尝试构建我的 dll 库。我有这个代码:
class VariablesSerializableValue
: public SerializableValueBase
{
private:
Serializable::Variables value;
public:
VariablesSerializableValue() = default;
VariablesSerializableValue(const VariablesSerializableValue&) = delete;
VariablesSerializableValue(_In_ Serializable::Variables&& arg) noexcept;
VariablesSerializableValue& operator=(const VariablesSerializableValue&) = delete;
VariablesSerializableValue& operator=(_In_ Serializable::Variables&& arg) noexcept;
const Serializable::Variables& getValue() const;
void add(_In_ const String& name, _In_ UniquePtr<SerializableValueBase>&& arg);
virtual UniquePtr<SerializableValueBase> clone() const override;
};
其中 SerializableValueBase 是一个多态抽象类(代码省略,无关)。 Serializable::Variables 定义如下:
class GLOWE_DLLEXPORT Serializable
{
public:
using Variables = Map<String, UniquePtr<Hidden::SerializableValueBase>>;
...
String 是一个不可抛出移动的字符串类,UniquePtr 只是一个使用std::unique_ptr 的模板。 Map 是使用 std::map 的模板,并提供了我自己的内存分配器。
当我尝试编译这段代码时,我得到了error C2280: 'std::pair<const _Kty,_Ty>::pair(const std::pair<const _Kty,_Ty> &)': attempting to reference a deleted function。错误日志说错误是由VariablesSerializableValue 类中的Serializable::Variables value 声明引起的。尽管我明确删除了类中的复制构造函数和赋值,但我不知道是什么原因造成的。
我尝试转换此代码以使其使用 PIMPL,但它只是将错误移至声明和定义实现类的 .cpp 文件中。我不知道如何解决这个问题。非常感谢任何建议。
【问题讨论】:
-
显示minimal reproducible example 以及所有错误消息的完整文本。不要用散文来描述它们。
-
您应该发布一个最小可重现示例。没有它,你只会得到反对票。
标签: c++ c++11 visual-c++ dll