錯誤位置的標頭檔案宣告導致新增類變數出錯

2021-06-13 08:57:39 字數 1014 閱讀 7013

問題描述:

新增乙個繼承自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...