我有一个带有Cat
类的lib,该类具有属性std::mapinfo
:
#ifdef LIB_EXPORT
#define LIB_API __declspec(dllexport)
#else
#define LIB_API __declspec(dllimport)
#endif
// Works!
class Dog {
std::map<int, std::unique_ptr<int>> info;
};
// Compile errors
class LIB_API Cat {
std::map<int, std::unique_ptr<int>> info;
};
假设:客户端总是使用相同版本的std::unique_ptr,并且Cat
实例的内存布局与DLL所期望的相同。
Dog
类已成功编译,但Cat
类失败,出现3个错误:
C2280"std::pair::pair(const std::成对&(":试图引用已删除的函数
要导出Cat
类,我应该做什么?
当Visual Studio需要导出一个类时,它会实例化所有可能的东西。如果没有显式删除复制构造函数和复制赋值运算符,它还会尝试创建它们。
遗憾的是,由于存在唯一指针,无法复制成员变量info
。因此,当它试图导出类时,它失败了。
添加:
Cat(const Cat&) = delete;
Cat& operator=(const Cat&) = delete;
根据您的类定义。