錯誤位置的頭文件聲明導致添加類變量出錯

問題描述:

添加一個繼承自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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章