给定以下课程:
// myClass.hpp
class Child1;
class Child2;
class MyClass {
public:
virtual void doSomething (const MyClass&) const = 0;
virtual void doSomething (const Child1&) const = 0;
virtual void doSomething (const Child2&) const = 0;
};
// child1.hpp
#include "myClass.hpp"
class Child1 : public MyClass {
public:
virtual void doSomething (const MyClass&) const override;
virtual void doSomething (const Child1&) const override;
virtual void doSomething (const Child2&) const override;
};
// child2.hpp
#include "myClass.hpp"
class Child2 : public MyClass {
public:
virtual void doSomething (const MyClass&) const override;
virtual void doSomething (const Child1&) const override;
virtual void doSomething (const Child2&) const override;
};
编译器给我错误:
undefined reference to 'Child1::doSomething(MyClass const&)'
其他
doSomething(..)
功能也会打印相同的错误。我确定在包含文件时会出错(我对每个头文件都使用了include防护!)。我的问题是:我必须在哪里包括相应的文件,哪里需要前向声明?
最佳答案
该错误告诉您没有对整个方法的引用。
换句话说,您需要在* .cpp文件中或直接在标题中定义方法。例如,请参见此overview或此similar question。答案告诉您这实际上不是编译器错误,而是链接器错误。
编辑:正如汉斯·奥尔森答案所暗示的,也可能是您需要include your cpp files。
如果您不完全了解实现的外观,但是想了解标头概念是否有效,可以将其实现为空
virtual void doSomething (const MyClass&) const override {}
或者使用带有标志“ -c”的gcc编译代码,该标志告诉gcc enter to just do the compiling not the linking。
关于c++ - 无法解决循环依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41096274/