【发布时间】:2012-04-21 18:08:09
【问题描述】:
在另一个头文件中转发声明是否合法?例如:
#ifndef _MAIN_H_
#define _MAIN_H_
class ClassA;
class ClassB;
#include "classa.h"
#include "classb.h"
#endif
#ifndef _CLASSA_H_
#define _CLASSA_H_
#include "main.h"
class ClassA
{
public:
ClassB b;
};
#endif
#ifndef _CLASSB_H_
#define _CLASSB_H_
#include "main.h"
class ClassB
{
public:
ClassA a;
};
#endif
A 类和 B 类都相互依赖,并且都有另一个类型的对象。我所做的是在另一个文件中前向声明这两个类。有没有一种干净的方法可以做到这一点?
【问题讨论】:
-
你需要打破这个循环。尝试考虑如果您尝试创建 A 的实例会发生什么。(创建 A,需要创建 B,需要为此创建 A,需要为此创建 B,...)
-
这就是耦合。不是吗?为什么需要彼此的定义?具体例子?如果它们的功能如此相似,你能把它们变成子类吗?
-
@CppLearner "你为什么需要彼此的定义?"我的错误
-
虽然很糟糕,但归根结底这是一个设计问题。因此,您实际上应该提供两个类的实际名称以及它们的作用。从那里我们可以帮助找出最佳设计实践。
-
您需要(或者更确切地说,应该)为此使用指针。