問題描述:
新增乙個繼承自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 ***
#define ***
your declaration
#endif
即可避免重複宣告問題
其次,當兩個標頭檔案互相引用的時候,在 .h檔案中不要include對發, 而是使用宣告,比如:
#ifndef _a_h
#define _a_h
class b;
class a
;#endif
#ifndef _b_h
#define _b_h
class a;
class b
;#endif
C 標頭檔案與類的宣告
complex.h 1 防衛式宣告 ifndef complex 告訴編譯器曾經沒有 define complex endif 作用 發展乙個複數,把它放在標頭檔案中,因為很多程式要用到這個標頭檔案,include complex 當第一次include這個標頭檔案後,編譯器就會進入標頭檔案中,並且...
類前置宣告和標頭檔案包含
類的前置宣告 forward declaration 和包含標頭檔案 include 的區別常常會迷惑我們,特別是涉及兩個類相互包含的時候。因此我們有必要搞清楚二者的區別以及二者的適用場合。首先我們需要問乙個問題是 為什麼兩個類不能互相包含標頭檔案?所謂互相包含標頭檔案,我舉乙個例子 圖層類clay...
VS類新增標頭檔案注釋
vs2015參考 修改兩個檔案,詳細資訊 vs2010 找到vs的安裝目錄 e program files x86 microsoft visual studio 10.0 common7 ide itemtemplatescache csharp code 2052 class.zip 開啟cla...