头文件互相包含

有时候当头文件包含互相重叠时,可能会出现下面两个错误,而且成双成对出现(IDD_VIEW是我的对话框ID):

error C2065: 'IDD_VIEW' : undeclared identifier

error C2057: expected constant expression

解决办法是:在对话框类头文件中包含 #include "resource.h" 具体原因不知道什么

 

1:头文件重叠包含的问题
这样情况就仿照vc固有的方法(比如你的文件为test1.h,test1.cpp)
只需在test1.h里加入:
#ifndef test_H
#define test_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CTest
{
....
};
#endif
一切就ok
2:两个类相互包含的问题,类A里包含有类B的实例,而类B里包含有类A的实例
这种情况,你用指针就迎刃而解。
//   A.h   ///

#ifndef   _A_H_
#define   _A_H_

class   B;                   //   声明一个空的B类,后边再进行具体声明和定义.
class   B ';                 //   声明一个空的B '类,后边再进行具体声明和定义.

class   A                     //   A的声明,具体实现(implement)最好写在A.CPP中.
{
        ...
        B         *m_pB;
        B '       *m_pB ';
        ...
};

#endif

//   B.h   ///

#ifndef   _B_H_
#define   _B_H_

#include   "A.h "

class   B                       //   B的声明,具体实现(implement)最好写在B.CPP中.
{
        ...
        A         *m_pA;
        ...
};

#endif


//   B '.h   ///

#ifndef   _B '_H_
#define   _B '_H_

#include   "A.h "
#include   "B.h "

class   B ':public   B           //   B '的声明,具体实现(implement)最好写在B '.CPP中.
{
        ...
        A         *m_pA;
        ...
};

#endif

__________________________________________________
不过我个人认为,最好不要相互包含.
1.   你可以把两个.h文件合并成一个文件
2.   或者这样

(1)myclass1.h

#ifndef   _MYLCASS1_H_
#define   _MYLCASS1_H_

class   myclass2;

class   myclass1
{
};

#endif

(2)   myclass2.h

#ifndef   _MYCLASS2_H
#define   _MYCLASS2_H

class   myclass1;

class   myclass2
{
};
#endif

_______________________________________________________________
//in   MyEdit.h
class   CMyDialog;
class   CMyEdit:public   CEdit
{
    pubilc:
          CMyEdit(CMyDialog   *pDlg);
    protected:
          CMyDialog   *   m_pDlg;
    ..
}
//in   MyEdit.cpp
#include   "MyDialog.h "
...

//in   MyDialog.h
#include   "MyEdit.h "

class   CMyDialog:public   CDialog
{
    protected:
          CMyEdit   m_editWnd;
}

其实我和   楼上的longyii(宁静.致远)   是一样的

这里我再罗嗦几句,
1)在一个类(如CMyEdit)的一个实例作为某个类的成员变量时,其container类
  (如CMyDialog)就得知道该成员的内存布局,因此你就必须将CMyEdit的定义  
    告诉container,也就是在MyDialog.h中   #include   "MyEdit.h "
2)而在MyEdit.h中,是一个指针CMyDialog   *来作为CMyEdit的成员,因此,这里
    只要你声明CMyDialog是一个class即可
3)而进一步,在MyEdit.cpp中,你会调用到CMyDialog的一些方法,这时就知道
    CMyDialog的定义,因而有必要在MyEdit.cpp中#include   "MyDialog.h "了


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值