请教了:
请教两个问题:1.在vc中,如果想通过一个对话框类a打开对话框类b和对话框类c,那我是应该在对话框类a的头文件a.h中声明对话框类b和对话框类c的头文件b.h c.h,还是应该在对话框类a的源文件a.cpp中包含b.h c.h呢????2.像这种声明头文件和包含头文件的问题有没有规率可循呀???最好举个例子说说。谢谢!!!

解决方案 »

  1.   

    编译器对 .cpp 文件是单个独立编译的,不对 .h 文件进行编译;
    #include 宏把 .h 文件加入到 .cpp 中以后才进行编译。
    所以,例如你的例子,你可以这样写:
    // a.h :
    #include "b.h"
    #include "c.h"
    ...// a.cpp:
    #include "a.h"
    ...也可以这样写:
    // a.cpp:
    #include "b.h" // b.h 和 c.h 在 a.h 上面
    #include "c.h" 
    #include "a.h"
    ...至于遵循的规则吗,好像没有什么明文规定把,只是个人习惯而已,不过我举一个例子给你看:
    // a.h:
    // class B 的声明在 b.h
    class A
    { public:
      B m_b;
    };// a.cpp:
    #include "b.h" // ok,这样写没问题
    #include "a.h"
    ...不过,如果又有一个 .cpp 文件#include "a.h" 也必须这样写,要不就出错了:
    // x.cpp:
    #include "b.h" // ok
    #include "a.h"
    ...// x.cpp:
    #include "a.h" // error, need b.h
    ...所以,象这样的,最好把 b.h 写在 a.h 里:)
    知道了吗?
      

  2.   

    我的老大,你可能没明白我的意思:我这是在一个编程例子中遇到的问题,这个工程界面上有一个叫"添加"的按钮控制对话框a,通过对话框a上的菜单,它又可打开对话框b和对话框c,于是我在这工程的classview中新添三个类Cdlga Cdlgb Cdlgc 我是想请问我在这工程的classview中
    那我是应该在对话框类a的头文件a.h中声明对话框类b和对话框类c的头文件b.h c.h,还是应该在对话框类a的源文件a.cpp中包含b.h c.h呢????2.像这种声明头文件和包含头文件的问题有没有规率可循呀???最好举个例子说说。谢谢!!!
      

  3.   

    "在a.cpp中,会将a.h包含进来"!!!
    所以你在a中打开b的时候,如果是这样的:
    void CDlgADlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    CDlgB dlgB;
    dlgB.DoModal();
    }
    则只要在a.cpp中包含b.h就可以了但如果你是要将dlgb声明为a的成员变量,那只有在a.h中声明了
    class CDlgADlg : public CDialog
    {
    // Construction
    public:
    CDlgADlg(CWnd* pParent = NULL); // standard constructor
            CDlgB  dlgB;
    ........所以b.h应该包含在“最早”使用的地方
      

  4.   

    请教两个问题:1.在vc中,如果想通过一个对话框类a打开对话框类b和对话框类c,那我是应该在对话框类a的头文件a.h中声明对话框类b和对话框类c的头文件b.h c.h,还是应该在对话框类a的源文件a.cpp中包含b.h c.h呢????
    答:都可以
    2.像这种声明头文件和包含头文件的问题有没有规率可循呀???最好举个例子说说。谢谢!!!
    答:最好是加在.h文件里