我老是搞错.
   
  boy.h
  class Boy 
   
  boy.cpp 
  Boy  g_boy;
   
  使用全局变量
  Collection.h
  #include “boy.h”
  extern Boy g_boy;
   
  似乎更优雅的方式
  #ifdef  _BOY__HH__
extern  Boy  g_boy ;
#endif
 
 
错误方式:    定义宏根本解决不了这个问题
boy.h
#pragma once
#ifndef _BOY__HH__
#define _BOY__HH__ 
class  boy 
Boy  g_boy;
#endif 
编译错误 
1> .obj : error LNK2005: "class class 全局变量名 " (?g_CITSCache@@3VMarketCache@@A) 已经在 XXX.obj 中定义
  
1>  正在生成非 SAFESEH 映像。
  
1>D:\XXX.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
 
等我看了编译原理再来解释.
 
如何防止循环引用? 
A->b->c->A