我正在虚幻引擎中做一个项目,假设我有一个
Base
类,它是一个模板化抽象类和一个 Derived
类,它继承自基类。
template <typename U>
class Base
{
public:
Base();
virtual ~Base();
virtual U Add(U Number1, U Number2) = 0;
};
class Derived: public Base<int>
{
public:
Derived();
virtual ~Derived();
virtual int Add(int Number1, int Number2) override;
};
如果我构建我的项目,我会得到这些错误:
unresolved external symbol "public: __cdecl Base<int>::Base<int>(void)" (??0?$Base@H@@QEAA@XZ) referenced in function "public: __cdecl Derived::Derived(void)" (??0Derived@@QEAA@XZ)
unresolved external symbol "public: virtual __cdecl Base<int>::~Base<int>(void)" (??1?$Base@H@@UEAA@XZ) referenced in function "public: virtual __cdecl Derived::~Derived(void)" (??1Derived@@UEAA@XZ)
我没有做过很多 C++,所以也许有人可以帮助我?谢谢!
将模板(成员)函数的定义放入标题中。这是最简单的解决方案;另一种方法可能是将定义保留在 cpp 中并为您使用的类型实例化模板,但这需要您列出使用它的所有类型。除非你做其中任何一个,否则模板成员函数不能被实例化或内联,因此链接器找不到它。