c ++如何包含(循环依赖)?

时间:2012-05-16 05:51:01

标签: c++

我有Environment.h文件:

#include <windows.h>
#include "interfaces.h"

#ifndef ENVIRONMENT_H
#define ENVIRONMENT_H

class Environment {};
#endif

我有Interfaces.h文件:

#ifndef INTERFACES_H
#define INTERFACES_H

class IMoving {
    public: 
        virtual void Move() = 0;          
};

#endif

在界面中我想获得一个环境类,知道如何移动

class IMoving {
    public: 
        virtual void Move(Environment*) = 0;          
};

如果我想这样做,我需要包括environment.h

#include "Environment.h"

这里我得到一个错误,因为Environment.h - 包括Interfaces.h和Interfaces.h - 包括Environtment.h。那么如何让它发挥作用呢?

对不起拼写错误

2 个答案:

答案 0 :(得分:5)

对于circular dependencies,可以使用前向声明

在接口定义上方的Interfaces.h中,转发声明Environment如下:

class Environment;

然后,当您在类中实现IMoving时,您将在其实现文件中包含Environment.h。

您可以阅读有关转发声明here的更多信息。

答案 1 :(得分:4)

看起来你几次拼错了班级名称(环境,环境)。这可能是你问题的根源吗?

否则我通常使用Forwarded Declaration