問題描述:
添加一個繼承自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