【发布时间】:2010-12-11 22:09:57
【问题描述】:
文件 #1 (foo.h):
#ifndef FOO_H_
#define FOO_H_
#include "baseclass.h"
#include "bar.h"
class Bar;
class Foo : public baseclass {
public:
bar *varBar;
};
#endif
文件 #2 (bar.h):
#ifndef BAR_H_
#define BAR_H_
#include "foo.h"
class Foo;
class Bar {
public:
Foo *varFoo;
};
#endif
文件 #3 (baseclass.h):
#ifndef BASECLASS_H_
#define BASECLASS_H_
#include "foo.h"
class Foo;
class baseclass {
public:
list<Foo*> L;
};
#endif
但我在class Foo : public baseclass 行的文件#1 中遇到编译错误:
Error: expected class-name before »{« token
如果我添加class baseclass; bevor 类声明,我会收到此错误:
Error: invalid use of incomplete type »struct baseclass«
所以我的问题是,如何使用基类解决循环依赖关系?
问你是否没有得到某个点。我已经尝试更改包含标题的顺序,但到目前为止还没有运气。 感谢您的任何提示。
编辑:注意:我正在使用包含警卫 EDIT2:它不限于指针,所以我删除它们,以防万一。 EDIT3:添加了基类(忘记了 O.o) EDIT4:现在应该很清楚并且没有任何缺陷,此代码仍然存在问题。
【问题讨论】:
-
基类是模板类吗?
-
EDIT: Note: I am using include guards: 我们在你的例子中没有看到它们,你能详细说明一下吗? -
你需要清理你的代码。您现在拥有的代码在问题的上下文中毫无意义,因为它根本没有以任何方式与问题相关联。您没有“与基类的循环依赖”。再一次,您的
baseclass仅被提及一次,因此它不能参与循环依赖。编译所需的只是提供baseclass的定义(可能应该在baseclass.h中,但我们看不到它),并修复一些拼写错误。 -
我会添加它,.. sry,hwo 愚蠢.. 只是忘了它。
-
就循环依赖而言,它们已经 [几乎] 在您的代码中通过类声明解决了,只是您忘记删除实际的
#include圆圈。从foo.h中删除#include "bar.h"或从`bar.h' 中删除#include "foo.h"。