This question already has answers here:
Resolve build errors due to circular dependency amongst classes

(11个答案)


1年前关闭。




我已经在网上搜索了很多东西,但是还没有找到任何可以解决我的问题的东西。我有这些课:

文件:A.h
#include "B.h"

class A {
...
B method();
}

文件:B.h
#include "A.h"

class B : public A {
...
}

我在B类文件中收到此错误“在'{'标记之前的预期类名”。我试过在A.h和B.h中添加类声明,但没有任何效果。我猜这是一个循环依赖问题。有人可以帮助我吗?

最佳答案

以下对我有用。如果仍有问题,请提供mvce

oo

#ifndef FOO_H
#define FOO_H

class Bar; // Forward declaration

// Note: I'm not sure why this interface knows anything about the derived type
class Foo
{
public:
    // Omitted the virtual destructor in this example

    Bar& try1();
    const Bar& try2() const;

    Bar try3() const;

    Bar* try4();
    const Bar* try5() const;
};

#endif

Foo.cpp
#include "Foo.h"

#include "Bar.h"

Bar& Foo::try1()
{
    return static_cast<Bar&>(*this);
}

const Bar& Foo::try2() const
{
    return static_cast<const Bar&>(*this);
}

Bar Foo::try3() const
{
    return Bar();
}

Bar* Foo::try4()
{
    return static_cast<Bar*>(this);
}

const Bar* Foo::try5() const
{
    return static_cast<const Bar*>(this);
}

Bar.h
#ifndef BAR_H
#define BAR_H

#include "Foo.h"

class Bar : public Foo
{
};

#endif

main.cpp
#include "Foo.h"
#include "Bar.h"

int main()
{
    Foo f;
    f.try1();
    f.try2();
    f.try3();
    f.try4();
    f.try5();

    return 0;
}

关于c++ - C++中对继承的循环依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29068305/

10-12 16:07