无法解决循环依赖

无法解决循环依赖

给定以下课程:

// 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/

10-08 21:03