include.cpp(main函数的cpp文件)文件中包含另一个.cpp文件的错误及原因
當(dāng)一個(gè)main函數(shù)的cpp文件包含另一個(gè)cpp文件,使用#include "data.cpp"? 是不可以的,例如下面
include.cpp
#include <stdio.h> #include "data.cpp" //extern void add(); void main() {#include "include.h"#include "yingcheng.itcast"add();getchar();}?
data.cpp 文件
#include "data.h" #include <stdio.h> void add() {int c = a + b;printf("\n");printf("%d", c);}data.h
#pragma once int a = 10; int b = 20; int c;yingcheng.itcast
#pragma once printf("俞文龍真是牛,跟著龍哥學(xué)c在也不用擔(dān)心c學(xué)不會(huì)");include.h
#pragma once printf("jajklsjklsdjkjskljdsadf");這是我們使用了#include "data.cpp"? 這樣包含一個(gè)cpp文件會(huì)發(fā)現(xiàn)報(bào)錯(cuò),竟然編譯不通過
?
于是我就查閱了往事的資料,網(wǎng)上資料是這樣說的cpp文件是獨(dú)自編譯的。舉例如下
因?yàn)樵诠こ叹幾g的時(shí)候各個(gè).cpp文件依次單獨(dú)編譯,最后才連接到一起,當(dāng)在編譯include.cpp文件時(shí),看到include.cpp文件中有#include "data.cpp" 文件時(shí)就把data.cpp中的內(nèi)容和include.cpp一起編譯生成include.obj文件。別忘了data.cpp文件也是.cpp文件也要單獨(dú)編譯,編譯完data.cpp文件生成data.obj文件后。再將所有編譯后的.obj文件連接到一生成.exe文件。這時(shí)就會(huì)發(fā)現(xiàn)data.obj中的內(nèi)容data.obj中也有(因?yàn)閕nclude.cpp中 #include"ata.cpp")。所以會(huì)出現(xiàn)重復(fù)定義的錯(cuò)誤。
這時(shí)你可能又會(huì)想到把data.cpp文件改名為data.h在include.cpp文件中#include "data.h" 不就行了。因?yàn)?h文件不會(huì)單獨(dú)編譯。確實(shí)是這樣。將data.cpp改為data.h后不管工程目錄中有沒有添加data.h文件都可以。可是前面說了.h文件中最好只放聲明。
總結(jié)一下:要想把自己實(shí)現(xiàn)的函數(shù)放到同一個(gè)文件中調(diào)用,如果放在.h文件中違背了.h文件最好只放聲明的原則。如果放在.cpp文件中在include.cpp中 #include相應(yīng)的.cpp文件則不能將這個(gè).cpp文件添加到工程目錄下,這樣看起來又不像是一個(gè)整體(憑什么哪個(gè).cpp文件就不能出現(xiàn)在工程目錄下)
到底是不是這樣我們也不知道,具體的解決方案是什么?答案是extern? ?
extern可以置于變量或者函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示變壓器遇到此變量和函數(shù)時(shí)在其他模塊中尋找其定義。另外,extern也可用來進(jìn)行鏈接指定。
關(guān)于extern更詳細(xì)的解釋請看百度百科 所以我們只需這樣:如果在include.cpp中要調(diào)用data.cpp中的函數(shù),不要在include.cpp中#include "data.cpp" ,只需在include.cpp中聲明一下要調(diào)用的函數(shù),并且聲明前加關(guān)鍵字extern
廢話不多說,下面我就試一把,修改代碼如下:
#include <stdio.h>extern void add(); void main() {#include "include.h"#include "yingcheng.itcast"add();getchar();}編譯成功
?
輸出結(jié)果:
好了,關(guān)于cpp文件引入另一個(gè)cpp文件報(bào)錯(cuò)講解結(jié)束,如果你覺得我寫的可以請關(guān)注我的博客
總結(jié)
以上是生活随笔為你收集整理的include.cpp(main函数的cpp文件)文件中包含另一个.cpp文件的错误及原因的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Word2Vec学习笔记(五)——Neg
- 下一篇: hdu1754(简单线段树)