none
预编绎头文件 RRS feed

  • 问题

  • 学习《VC++2008入门经典》的例题时:

    定义了一个类CBox,头文件是Box.h,为了在Box.cpp头文件中定义类CBox的成员函数,在Box.cpp头文件中我添加了#include"Box.h";

    为了重载CBox的运算符,又添加了BoxOperators.cpp文件并在文件中定义重载CBox运算符的全局函数,并在BoxOperator.h文件中#include"Box.h";

    为了能在main函数中使用这些重载的运算符函数,我又添加了BoxOperators.h文件,并在其中写出了那些重载运算符的函数原型。辟如:

    #pragma once
    bool operator>(const CBox& aBox,const double& value);

    请问在这个BoxOperator.h文件中为何不需要#include"Box.h"而这个程序的运行是正确的?

    2012年8月9日 14:47

答案

  • 您好,
    首先,我猜想您提到的BoxOperators.h文件和BoxOperator.h文件指的是同一个文件,即与BoxOperators.cpp匹配的头文件,只是您在输入的时候有些小失误,对吗?

    其次,我推断您在BoxOperators.cpp文件中,包含了Box.h文件,

    并且#include “Box.h”是放在#include “BoxOperators.h”的前面。

    如果我的以上猜测都是正确的,那么原理如下:
    当源文件或头文件通过#include指令包含另一个头文件的时候,编译预处理器用头文件的内容取代#include伪指令。这就是说,头文件的所有内容最终都会被合并到某一个或某几个包含它的源文件中。相当于您在BoxOperators.cpp文件中,先写了Box.h中的内容,再写BoxOperators.h中的内容,因此编译的时候不会出错。

    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月13日 11:16
    版主