一、 错误
严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息
错误 LNK2001 无法解析的外部符号 "public: virtual class std::unique_ptr<class Ship,struct std::default_delete<class Ship> > __cdecl ShipFactory::createShip(void)" (?createShip@ShipFactory@@UEAA?AV?$unique_ptr@VShip@@U?$default_delete@VShip@@@std@@@std@@XZ) aim_factroy C:\Users\jia\source\repos\aim_factroy\mian.obj 1
二、分析
错误 LNK2001 是一个链接错误,它表示编译器在链接阶段无法找到某个符号的定义。在你的情况中,错误信息表明无法找到 ShipFactory
类中 createShip
方法的外部符号。下面我们来分析一下这个错误的可能原因和解决方案。
错误分析
错误信息的关键部分是:
无法解析的外部符号 "public: virtual class std::unique_ptr<class Ship,struct std::default_delete<class Ship> > __cdecl ShipFactory::createShip(void)"
这意味着:
ShipFactory
类有一个名为createShip
的方法,它返回一个std::unique_ptr<Ship>
类型。- 链接器尝试找到这个方法的实现(定义),但是没有找到。
常见原因
-
缺少方法的实现:虽然你可能在头文件中声明了
createShip
方法,但如果没有在源文件中实现它,就会导致这个错误。// ShipFactory.h class ShipFactory { public: virtual std::unique_ptr<Ship> createShip(); };
// ShipFactory.cpp std::unique_ptr<Ship> ShipFactory::