Я пытаюсь собрать свою библиотеку 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 является абстрактным классом polymorphi c (код опущен, не имеет значения). 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
. В журнале ошибок указывается, что ошибка вызвана объявлением Serializable::Variables value
в классе VariablesSerializableValue
. Я понятия не имею, с чем это связано, хотя я явно удалил конструктор копирования и присвоение в классе.
Я попытался преобразовать этот код, чтобы он использовал PIMPL, но он просто переместил ошибку в файл. cpp где класс реализации был объявлен и определен. Я понятия не имею, как справиться с этим. Любой совет очень ценится.