近日,我写了一个语音聊天的程序, 不同的类型声明在不同的文件中,全局变量及符号全部集中在一个文件中 。
下面是文件结构 :

 1// main.cpp
 2
 3#include "id.h"      //全局符号和变量
 4#include "sock.cpp"  //我封装的类 
 5#include "wave.cpp"
 6
 7int main()
 8{
 9.
10}
11
12
13//id.h
14
15#ifndef _id_h
16#define _id_h
17
18#include "sock.cpp"
19
20#define ID_xxxxx  xxxxxx
21
22Socket  gClient;
23..
24
25#endif
26
27
28//sock.cpp
29
30#ifndef _sock_cpp
31#define _sock_cpp
32
33#include "id.h" 
34
35class Socket
36{
37.
38};
39
40XXXX(XXX,ID_XXXXX,..);
41
42#endif
43
44
45
46
编译时的顺序是
 
main.h ->id.h  ->| #define _id_h
                           #include "sock.cpp"
                          |-> sock.cpp    ->|
                                                     #include "id.h"
                                                     //_id_h 已定义
                                                     // 忽略所有#ifndef   #endif 中的变量和符号声明
                                                     XXXX(XXX,ID_XXXXX,.....)   //发生错误
                                                     // 编译器报错 `ID_XXXX' undeclared (first use this function) 

经过多次修改我发现还没有办法修正这样的错误,(除非你愿意写上十行extern int ......),
没办法只能main.h 中声明所有的变量  去掉id.h 中对Socket  变量的声明。

终于编译通过!
不知看这篇文章的你,是否有办法解决这种循环引用时的产生的问题,我们一起讨论!!