2017-04-06 39 views
0

我有一个关于包括标题的快速问题 我在情况下,我想建立2个类,他们都持有指向其他类的指针。 他们每个人都在不同的标题。 我怎么能包括的方式,我不会得到识别错误的标题我如何包括其他头已经包含我目前的标题

Client.h

#ifndef CLIENT_H 
#define CLIENT_H 
#include "Viewable.h" 

    class Client{ 
    Viewable *viewptr; 
} 
#endif 

Viewable.h

#ifndef VIEWABLE_H 
#define VIEWABLE_H 
#include "Client.h" 

    class Client{ 
    Client* client; 
} 
#endif 

这段代码给我标识符错误因为有双重定义。 我明白为什么,我该如何避免该错误?

+2

我猜你的意思是写'类Viewable'在你的第二个代码块...的 – wkl

+1

可能的复制[什么是向前声明C++?](http://stackoverflow.com/questions/4757565/what-are-forward-declarations-in-c) – wkl

+1

[Resolve头包括循环依赖项]的可能重复(http://stackoverflow.com/questions/ 625799/resolve-header-include-circular-dependencies) – nwp

回答

0

使之既类的新头文件:

#ifndef BOTH_H 
#define BOTH_H 

    class Client; 
    class Viewable; 

#endif 

both.h不是包括你的每头的。

0

我如何可以包括其他的头已经包括我现在的头

你不能。没有办法做到这一点。它会创建包含的无限递归(如果使用标头守护,它将过早终止)。

我该如何避免该错误?

你需要改变你的程序,所以不存在循环依赖,因此可以去除夹杂物之一。

实际上,在示例程序的情况下,两个类实际上都不依赖于另一个类的定义,所以都不需要包含其他类。关于声明的更换夹杂物:

class Viewable; 
class Client { 
    Viewable *viewptr; 

...

class Client; 
class Viewable { 
    Client* client; 
+0

我想补充一点,'Client'只能将**指针**保存为'Viewable'和'Viewable'只能保存d **指针**到'客户端'。你不能有一个“按值”的成员,因为那时的编译器不知道每个其他类的大小,只知道类的名字。 –