x.h:
class a
{
...
};x.cpp:
#include "x1.h"//上面我定义了一个类,但是我在x1.cpp中要使用这个类,因此我在
x1.cpp加入
#include "x.h"
这样为什么没有造成重定义错误?还有这种加#include"x1.h"是属于什么连接:外连接吗?

解决方案 »

  1.   

    你都是在cpp文件中包含另外的头文件,它不会产生重定义
    如果你是在彼此的头文件中包含对方头文件倒是有可能发生, 如果你在每个头文件中加入
    #if !defined(YOUFILEMECRO)
    #define YOUFILEMECRO
    ////
    // 头文件
    ////
    #endif
    可能也不会出现,没试过:)
      

  2.   

    //上面我定义了一个类,但是我在x1.cpp中要使用这个类,因此我在
    x1.cpp加入
    #include "x.h"你在x1.cpp中并不是使用这个类,x1.cpp是这个类实现部分的文件,x.h是这个类定义部分的文件(头文件),使用类时要实例化。
      

  3.   

    如果我没有理解错楼主的意思的话,这应该不是什么难题,随便找本C/C++的书就可以找到答案。
    以下是我理解的#include:
           它并不是什么连接,而是将x1.h的内容“包含”进来。也就是说,在编译预处理时,编译
    器是将x1.h的全部内容复制到x1.cpp中,作为一个源程序来编译,得到一个目标(.obj)文件。
    所以,x1.h也是源文件的一部分。