亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++ 'include' 的兩個頭文件互相包含出錯

2019-11-06 06:48:13
字體:
來源:轉載
供稿:網友

頭文件保護符

通常,現在寫代碼時都會隨手在頭文件中加入頭文件保護符。有以下兩種形式的保護符。

#ifndef ABCDE#define ABCDE//..... 內容#endif
#PRagma once兩種模式的作用是相同的,都是只讓頭文件在解析過程中只會展開一次。

能工作的循環包含情況

今天遇到的問題是循環包含問題,也就是說如下例子

//********************************* a.h 文件#pragma once#include <iostream>#include "b.h"using namespace std;int a = 1;//********************************* b.h文件#pragma once#include "a.h"int b = 1;

這是雖然有循環包含,但是由于有頭文件保護符的作用,則兩者之間是不沖突的,假設存在以下cpp文件:

#include "a.h"#include "b.h"int main(){    cout << a << endl;    cout << b << endl;}根據 cpp 文件中包含的頭文件的順序,則該cpp 文件會被展開為如下情況:

//-----------------------------------#include "a.h"#include <iostream>//----------------------#include "b.h"int b = 1;//----------------------using namespace std;int a = 1;//------------------------------------int main(){    cout << a << endl;    cout << b << endl;}

可以看出,該代碼的使用完全沒有問題、

出錯的循環包含情況

但是如果出現以下這種情況,則循環包含會出錯,且報錯都是編譯解析錯誤,即分號錯誤,<號錯誤等毫無問題的錯誤。

//**************************************** a.h 文件#pragma once#include "b.h";#include <iostream>using namespace std;class A {};//*************************************** b.h 文件#pragma once#include "a.h"class B {	A * aptr;};

 cpp文件如下:

#include "a.h"#include "b.h"int main() {}

此時報錯就比較迷離了。會出現錯誤如下:

錯誤 C2143語法錯誤: 缺少“;”(在“*”的前面)Project2d:/文檔/visual studio 2015/projects/project2/project2/b.h5

錯誤 C2238意外的標記位于“;”之前Project2d:/文檔/visual studio 2015/projects/project2/project2/b.h5

分析時嘗試將兩個頭文件展開在cpp文件中,展開結果如下

//------------------------#include "a.h"//-----------#include "b.h"class B{    A * aptr;};//------------#include <iostream>using namespace std;class A{};//---------------------------int main(){}

此時可以明顯看出,問題出現在,當將頭文件按其各自在cpp中聲明的順序展開時,會出現在 class B 中,類型 A 未經過聲明就使用了的情況。

這個問題難在三個點上:

1. 編譯器報錯的地方很奇怪,說是分號錯誤類似的問題,根本無從定位

2. 這個問題在包含順序變動后很可能就消失了,但是弊端還是存在的。假設上例中 cpp 文件先包含 b.h 再包含 a.h ,則就沒有問題

3. 若是不止兩個頭文件間發生了循環包含,而是多個頭文件循環包含,則問題更難定位。如 a 包含 b,b 包含 c,c 包含 a,則比較隱晦。

反思

說明:通常在面向對象編程中,我們在頭文件中都是定義類,若兩個頭文件包含,則說明兩個頭文件中包含的兩個類之間關系高度耦合。即A 需要 B , B 需要 A。依照《重構》中的思想,這種情況屬于代碼臭味,需要考慮將這兩個類中的內容合并為一個類,之后將不存在循環包含的情況。類之間通常是單向依賴關系,雙向依賴關系意味著臭味,需要對代碼進行拆分重組,因此當出現循環包含時,應當考慮代碼重構。 

轉載請標明出處:http://blog.csdn.net/virtual_func


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品一区二区三区国产精品| 欧美夫妻性视频| 亚洲综合色av| 久久福利视频导航| 精品国产一区久久久| 欧美精品xxx| 欧美精品video| 成人国产精品一区| y97精品国产97久久久久久| 精品夜色国产国偷在线| 亚洲精品一区二三区不卡| 国产精品成人aaaaa网站| 久久精品视频在线观看| 亚洲精品国产精品自产a区红杏吧| 亚洲欧美三级伦理| 91精品国产高清久久久久久91| 亚洲字幕在线观看| 亚洲国产一区自拍| 国内精品伊人久久| 中日韩美女免费视频网站在线观看| 久久久久久一区二区三区| 国产午夜精品全部视频播放| 这里只有精品在线播放| 亚洲高清av在线| 亚洲国产日韩欧美在线动漫| 欧美黑人狂野猛交老妇| 九九热这里只有精品免费看| 7777免费精品视频| 欧美激情一区二区久久久| 久久亚洲综合国产精品99麻豆精品福利| 97在线看免费观看视频在线观看| 91在线色戒在线| 亚洲第一av网站| 中文国产亚洲喷潮| 精品国模在线视频| 91精品久久久久久久久| 亚洲免费中文字幕| 国产深夜精品福利| 日韩精品在线电影| 日韩一级裸体免费视频| 欧美激情视频一区二区三区不卡| 奇米成人av国产一区二区三区| 精品国产91乱高清在线观看| 亚洲一区亚洲二区亚洲三区| 国产精品永久免费视频| 97在线视频免费观看| 久久综合五月天| 国产精品私拍pans大尺度在线| 欧美一级淫片aaaaaaa视频| 国产精品视频内| 日韩欧美国产一区二区| 亚洲精品网址在线观看| 久久网福利资源网站| 日本精品一区二区三区在线| 欧美激情网友自拍| 97国产精品人人爽人人做| 亚洲电影免费观看高清完整版在线观看| 午夜精品理论片| 日韩精品中文字| 亚洲精品国精品久久99热一| 国产主播欧美精品| 欧美日韩一区免费| 欧日韩在线观看| 91精品视频大全| www.日韩欧美| 国自在线精品视频| 欧美有码在线观看视频| 国产精品一区二区3区| 亚洲午夜未删减在线观看| 亚洲电影免费观看高清完整版| 国产最新精品视频| 91精品啪在线观看麻豆免费| 国产欧美va欧美va香蕉在线| 日本亚洲精品在线观看| 亚洲精品视频播放| 色综合伊人色综合网| 久久亚洲精品网站| 麻豆乱码国产一区二区三区| 亚洲最大在线视频| 亚洲精品免费一区二区三区| 亚洲第一福利在线观看| 国产精品久久久久久久久久小说| 亚洲欧美成人精品| 97福利一区二区| 欧美激情中文字幕乱码免费| 久久影视电视剧免费网站| 欧美贵妇videos办公室| 2019日本中文字幕| 欧美激情中文字幕乱码免费| 日韩精品在线影院| 欧美精品中文字幕一区| 久久这里只有精品视频首页| 国产精品嫩草影院一区二区| 91干在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 中文字幕日韩视频| 成人网址在线观看| 国产一区二区三区免费视频| 中文字幕v亚洲ⅴv天堂| 亚洲一区二区三区在线视频| 欧美日韩亚洲一区二区三区| 欧美视频在线观看 亚洲欧| 欧美午夜无遮挡| 国产久一一精品| 亚洲精品小视频在线观看| 国产精品美女www爽爽爽视频| 高清亚洲成在人网站天堂| 久久久久久久久久久免费精品| 岛国视频午夜一区免费在线观看| 国产亚洲精品久久久优势| 亚洲国产精品久久精品怡红院| 姬川优奈aav一区二区| 一区二区三区视频观看| 欧亚精品在线观看| 亚洲成av人影院在线观看| 亚洲国产福利在线| 日本成人在线视频网址| 中文字幕亚洲专区| 亚洲欧美激情精品一区二区| 国产日韩换脸av一区在线观看| 亚洲欧洲激情在线| 国产区亚洲区欧美区| 国产91精品黑色丝袜高跟鞋| 欧美在线性视频| 欧美高跟鞋交xxxxhd| 国内精品久久久久影院 日本资源| 日韩乱码在线视频| 欧美日韩美女在线观看| 国产成人在线播放| 久热精品在线视频| 中文综合在线观看| 精品久久久久久国产| 日韩欧美精品网址| 国产精品成人观看视频国产奇米| 久久亚洲成人精品| 久久99热这里只有精品国产| 国产精品老牛影院在线观看| www.欧美精品| 亚洲精品福利在线观看| 色综合久久悠悠| 欧美在线免费看| 国产精品中文久久久久久久| 欧美一级淫片aaaaaaa视频| 国产综合久久久久久| 欧美成aaa人片在线观看蜜臀| 日韩一区二区三区在线播放| 久久免费视频在线| 欧美成人午夜激情视频| 欧美日韩激情视频8区| 日韩精品免费在线播放| 日本国产一区二区三区| 国产精品久久久久久久久久99| 国产亚洲精品综合一区91| 亚洲精品国产综合久久| 久久久免费观看视频| 日韩视频免费大全中文字幕| 色午夜这里只有精品| 成人免费黄色网| 久久久亚洲精品视频| 在线看片第一页欧美| 国产日韩欧美视频| 日韩av在线网站| 亚洲加勒比久久88色综合| 欧美极品xxxx|