在VC中用基于对话框形式生成的MFC Win32程序中对话框类的实现文件中,开头部分对头文件的引用如下:
    #include "stdafx.h"
    #include "MyDialog.h"
    #include "MyDialogDlg.h"
    #include "ChildDialog.h"
    这时,编译是通过的。但是,假如我调整一下顺序,改为:
    #include "MyDialogDlg.h"
    #include "stdafx.h"
    #include "MyDialog.h"
    #include "ChildDialog.h"
    这时就会报告很多错误被发现,不知道这是为什么?而且假如仅如下所示调整这两个头文件的顺序也会报错,这又是为什么呢?
    #include "MyDialogDlg.h"
    #include "MyDialog.h"
    难道声明头文件的顺序也有要求吗?
    另外,这里stdafx.h头文件中有些书籍介绍是声明预编译头文件,不知这里的预编译体现在头文件中内容的哪一部分呢?    请各位大虾指点!

解决方案 »

  1.   

    #include "stdafx.h"必须放在最前面,他里面有一些系统的预编译的头文件,另外,可能你的进程类的头文件要放在前面,这个我也不是很清楚
      

  2.   

    90%的情况下,#include "stdafx.h"要放在最前面
      

  3.   

    VC规定CPP文件中#include "stdafx.h"前面的东西是不会被编译的。
    看看,你调换之后是不是前面文件中的变量不能被识别了?
      

  4.   

    #include "stdafx.h"
    是最前一个头文件~
      

  5.   

    vc 下的编程都是以stdafx.h为基础的
      

  6.   

    To sjsj(悠行者):
       您提到“VC规定CPP文件中#include "stdafx.h"前面的东西是不会被编译的”,这句话出自什么地方呢?
       另外从提示的出错情况看,有一部分是由于没有定义ID号引起的,而ID号的定义是在Resource.h头文件中进行的,但是,我好像没有在stdafx.h中找到有关对这个头文件的直接或间接引用,请问它是在什么地方定义的呢?
      

  7.   

    #include "resource.h"这一句代码是在MyDialog.h文件中出现的,所以,通常要把#include "MyDialog.h"这一句放在#include "MyDialogDlg.h"之前。
    不过,如果你要是把没有定义ID号换成数值,就不必如此了。#include "stdafx.h"之所以需要放在前面,是因为其中有几个头文件,是对
    MFC库进行支持的,例如对CDialog类的声明。其实,不用#include "stdafx.h"也可以,但是需要把其中的几个对MFC库进行支持的头文件添加到所有需要的地方,如此一来,就非常麻烦,所以,还是使用#include "stdafx.h"更好。并且,预编译头文件还有可以加快编译速度的好处。
      

  8.   

    To CCplusplusCsharp:
       感觉回复我的问题,再请问您在stdafx.h头文件为所谓预编译头文件,那么这里的预编译体现在该头文件中什么代码部分呢?谢!
      

  9.   

    预编译头文件不是在头文件里面加什么东东,而是在VC的工程选项里面设置的
    菜单project->setting->选中一个CPP文件->C++->precompiled headers
    如果是.C文件,应该选中not use precompiled headers
    使用预编译头文件是为了加快编译速度