参考wizard生成的类的头文件的防多include的方法
解决方案 »
- 在一个函数中紧挨的两行代码,竟然跳过了第一行代码,直接去执行下面的一行
- 如何实现javascript中var obj = myCOM.getArray后obj[i].a,obj[i].b的操作
- 学习VC++2005//请推荐几本好书
- 如何实现TestDirector那种SnapShot?(把鼠标拖到某个程序的控件上,即可选中该控件并拍照)
- 新手问题:关于UpdateWindow()
- 内存泄漏问题
- 这个东东是什么意思(菜鸟问题)
- windows 查找dll的顺序 问题:
- 轻松抢高分。。。
- 有没有人愿意联合起来一起学攻克VC大难关呀?
- 金山游侠功能分析(-)如何实现让游戏停止
- 请问,MFC 与 KFC 有何异同
你把include 语句放在各自的.cpp文件头,不要放在.h内。
// a.h class A#include "b.h"class A{
....
B* m_b;
}// b.h class B#include "a.h"class B{
....
A* m_a;
}正确的方法为:
// a.cpp#include "a.h"
#include "b.h".......// a.h class Aclass B; // !!!!
class A{
....
B* m_b;
}// b.cpp
#include "a.h"
#include "b.h"............
// b.h class Bclass A; // !!!!111
class B{
......
A* m_a;
}
解决方法可以这样
原来在CMySocket类中加入一个CTalkDlg类的成员变量,MySocket.h 中有#include<TalkDlg.h>,改为:在CMySocket类中加入一个CWnd类的成员变量,MySocket.cpp 中加入#include<TalkDlg.h>,使用的时候进行一次强制类型转换就可以了,另外注释掉MySocket.h 中的#include<TalkDlg.h>语句
必须用我上面的方法!!!!!!!!!
#ifundefine......
#define..........语句,这是为了防止重复包含,所以你在takldlg.h中包含是没有用的,被编译器忽略了![email protected]
[email protected]
另外
b.h里的
Class A
是什么意思?难道要重新定义一遍?
说明下面用到的A定义为一个class。
不用重新定义,只是说明一下而已。注意,是class A; 而不是class A{...};就相当在一个h文件中定义:
// c.hclass B;class A{
....
B* m_b;
};class B{
....
A* m_a;
}这样肯定没问题。
所以你至少需要将其中一个改为指针。。
#ifndef XXXX
#define XXXX
...
...
...
#endif
这样就可防止交叉引用了。