我的情况看起来像这样:
template<typename T>
class BaseClass1
{
public:
virtual void foo() = 0;
};
class ChildClass1 : public BaseClass1<int>
{
public:
void foo() override
{
// do stuff
};
};
template<typename T>
class BaseClass2 : public BaseClass1<T>
{
public:
virtual void foo() = 0;
};
class ChildClass2 : BaseClass2<int>
{
public:
void foo() override
{
// call ChildClass1::foo()
BaseClass1::foo();
};
};
我的最终目标是能够在ChildClass2 :: foo()中调用ChildClass1 :: foo(),但我明显做错了。所有这些类都在它们自己的头文件中定义,以及它们的所有方法定义。
然后我有一个文件,我试图实例化ChildClass2。它看起来像这样:
#include "ChildClass1.hpp"
#include "ChildClass2.hpp"
ChildClass2 obj;
obj.foo();
当我尝试编译时,出现链接错误:
[...]未解析的外部符号&#34; public:virtual void __thiscall BaseClass1 :: foo(void)&#34; [...]函数&#34; public:virtual void __thiscall ChildClass2 :: foo(void)&#34;
如果我以错误的方式解决问题,有人能告诉我我在这里做错了什么,和/或更好的方法来实现我的目标吗?此外,如果有人能想到一个更具描述性的标题可能会很好!感谢。
答案 0 :(得分:0)
我认为你的代码可以做你想要的。 首先,你不能在ChildClass2 :: foo()中调用BaseClass1 :: foo(),因为BaseClass1 :: foo()是纯虚函数。
其次,你的ChildClass2是BaseClass1的子节点,与ChildClass1相同,所以这两个类没有父子关系,你不能在没有对象的情况下调用一个函数那个班的em。
答案 1 :(得分:-1)
您的ChildClass2::foo
方法调用未定义的BaseClass1::foo
。提供BaseClass1::foo
的定义或不在ChildClass2::foo
中引用它,您不应该遇到此问题。