c++ - 析构函数和“工厂”方法的 LNK2019 错误
问题描述
我在析构函数和返回类的 unique_ptr 的静态“工厂”方法上收到未解决的外部符号错误(LNK2019,考虑到当前年份,这似乎是及时的)(请参见下面的代码)。
#ifndef ABC_HPP
#define ABC_HPP
#include <memory>
enum SomeEnum { TYPE_A, TYPE_B };
template <SomeEnum Type>
class ABC
{
//------------------------------------------------------------------------------ Constructor / Destructor
private:
ABC();
/* Inaccessible Methods */
ABC(ABC&&) = delete;
ABC(const ABC&) = delete;
ABC& operator=(ABC&&) = delete;
ABC& operator=(const ABC&) = delete;
public:
~ABC();
//------------------------------------------------------------------------------ Factory Method
public:
static std::unique_ptr<ABC<Type>> Create();
//------------------------------------------------------------------------------
};
#endif /* ABC_HPP */
下面是上述类的实现:
#include "ABC.hpp"
//------------------------------------------------------------------------------ Constructor(s)
template <SomeEnum Type>
ABC<Type>::ABC() {}
//------------------------------------------------------------------------------ Destructor
template <SomeEnum Type>
ABC<Type>::~ABC() {}
//------------------------------------------------------------------------------ Create
template <SomeEnum Type>
std::unique_ptr<ABC<Type>> ABC<Type>::Create()
{
return std::make_unique<ABC<Type>>();
}
//------------------------------------------------------------------------------
一切都编译得很好......直到我这样做:
#include "ABC.hpp"
int main(int argc, char* argv[])
{
auto thingA = ABC<TYPE_A>::Create();
return 0;
}
我最初尝试在 Visual Studio 上编译它,但我也尝试过 clang 并得到了同样的错误。
我在这里到底做错了什么?我觉得我以前遇到过这个错误,但我太笨了,不记得问题出在哪里。
如果我使用原始指针,我可以摆脱析构函数错误,但我想在这里使用 unique_ptr。我也可以通过简单地完全注释掉析构函数来摆脱它,但这对我来说也不酷。另一种方法是在头文件中定义析构函数,但这很愚蠢;我应该能够分离实现。
到目前为止,我还没有找到让 Create 方法工作的方法。我只是想在这里做太多吗?我真的必须做一个工厂课程吗?我是不是太爱做梦了?这个问题是不是太长???
提前感谢任何回复的人。:)
解决方案
推荐阅读
- json - 在 Flutter 中解码 JSON 错误,类型 '(dynamic) => Null' 不是类型 '(String, dynamic) => void' of 'f' 的子类型
- rust - 有没有办法在 bevy 游戏引擎中检测 Sprites 的碰撞?
- vba - MS Access 2016 - 如果语句返回不正确的值
- graph - 在更大的图中搜索节点的几何配置的特定算法
- java - java打印流到页面文件
- .htaccess - 在移动设备上找不到网页 - 404
- reinforcement-learning - 从 ray.tune 中提取代理
- python - 我可以将一个数据列中的特定值移动到另一列,同时保持其他值不变吗?
- python - 使用 wand 图像错误读取 PDF 文件:wand.exceptions.DelegateError
- firebase - 在 Firebase 中为特定用户添加数据