问题描述:
添加一个继承自CAsyncSocket的类CClientSocket,然后添加相关头文件声明,再在CClientDlg类中定义
CClientSocket m_ClientSocket;
结果运行出错:
e:\2005\vc\client\clientdlg.h(48) : error C2146: 语法错误 : 缺少“;”(在标识符“m_clientSocket”的前面)
e:\2005\vc\client\clientdlg.h(48) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
e:\2005\vc\client\clientdlg.h(48) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
错误原因和解决方法:
原因为在ClientSocket.h中添加了相关头文件声明 #include"ClientDlg.h",去掉即可。
原因分析总结:
ClientDlg.cpp中声明了#include"ClientDlg.h",而 ClientDlg.h中又声明了#include"ClientDlg.h"形成了相互声明
遇到这种问题
首先,每个头文件中都应该使用
#ifndef xxx
#define xxx
your declaration
#endif
即可避免重复声明问题
其次,当两个头文件互相引用的时候,在 .h文件中不要include对发, 而是使用声明,比如:
#ifndef _a_h
#define _a_h
class B;
class A
{
B* pB;
};
#endif
#ifndef _b_h
#define _b_h
class A;
class B
{
void func(A &);
};
#endif