请教了:
请教两个问题:1.在vc中,如果想通过一个对话框类a打开对话框类b和对话框类c,那我是应该在对话框类a的头文件a.h中声明对话框类b和对话框类c的头文件b.h c.h,还是应该在对话框类a的源文件a.cpp中包含b.h c.h呢????2.像这种声明头文件和包含头文件的问题有没有规率可循呀???最好举个例子说说。谢谢!!!
请教两个问题:1.在vc中,如果想通过一个对话框类a打开对话框类b和对话框类c,那我是应该在对话框类a的头文件a.h中声明对话框类b和对话框类c的头文件b.h c.h,还是应该在对话框类a的源文件a.cpp中包含b.h c.h呢????2.像这种声明头文件和包含头文件的问题有没有规率可循呀???最好举个例子说说。谢谢!!!
#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 里:)
知道了吗?
那我是应该在对话框类a的头文件a.h中声明对话框类b和对话框类c的头文件b.h c.h,还是应该在对话框类a的源文件a.cpp中包含b.h c.h呢????2.像这种声明头文件和包含头文件的问题有没有规率可循呀???最好举个例子说说。谢谢!!!
所以你在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应该包含在“最早”使用的地方
答:都可以
2.像这种声明头文件和包含头文件的问题有没有规率可循呀???最好举个例子说说。谢谢!!!
答:最好是加在.h文件里