This question already has answers here:
Resolve build errors due to circular dependency amongst classes
(11个答案)
1年前关闭。
我已经在网上搜索了很多东西,但是还没有找到任何可以解决我的问题的东西。我有这些课:
文件:A.h
文件:B.h
我在B类文件中收到此错误“在'{'标记之前的预期类名”。我试过在A.h和B.h中添加类声明,但没有任何效果。我猜这是一个循环依赖问题。有人可以帮助我吗?
Foo.cpp
Bar.h
main.cpp
(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