第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

求問(wèn):這個(gè)c++分文件類(lèi)外定義毛病在哪兒?

求問(wèn):這個(gè)c++分文件類(lèi)外定義毛病在哪兒?

C++
慕瓜6658770 2017-08-22 15:47:55
就是一個(gè)很簡(jiǎn)單的類(lèi)外定義的代碼,我在同文件時(shí)都測(cè)試了是好的,但分文件就一直報(bào)錯(cuò),不知為何。 我創(chuàng)建分文件的方式是:dev創(chuàng)建三個(gè)源文件,然后把頭文件的后綴改成.h
查看完整描述

5 回答

?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

在 C/C++ 中,程序代碼要經(jīng)過(guò)“編譯”和“鏈接”后才能形成可執(zhí)行程序。?

編譯:

一個(gè)源代碼文件經(jīng)過(guò)編譯器編譯后會(huì)生成帶有可執(zhí)行代碼的文件(也就是編譯器把你寫(xiě)的程序代碼翻譯為可運(yùn)行的機(jī)器碼),我這里說(shuō)的源代碼文件就是指 .cpp .c 之類(lèi)的。這樣被分別獨(dú)立編譯的代碼一般被叫做一個(gè)“編譯單元”。

你知道一個(gè)程序很可能有多個(gè)源代碼文件,所以顯然只這一個(gè)源代碼文件生成的可執(zhí)行代碼是無(wú)法構(gòu)成可完整運(yùn)行的程序的。


鏈接:

當(dāng)然了,每一個(gè)源代碼文件都會(huì)經(jīng)過(guò)編譯器的編譯,都生成了相應(yīng)的可執(zhí)行代碼片段。有人稱(chēng)之為“中間文件”“過(guò)程文件”等,其文件名后綴在不同編譯器下也不一樣,微軟的編譯器生成的是 .obj,gcc 生成的是 .o。

前面說(shuō)過(guò)一個(gè)編譯單元生成的 .o 文件無(wú)法完整運(yùn)行當(dāng)然是因?yàn)?其中可能引用了其他編譯單元中的變量?或者?調(diào)用了其他編譯單元中的函數(shù)。所以為了能生成最終的可執(zhí)行程序,就需要把這些編譯單元的 .o 文件進(jìn)行“鏈接”。

這是由鏈接器來(lái)處理的,它會(huì)找到不同編譯單元中互相引用或互相調(diào)用的代碼,處理好它們,并最終生成可執(zhí)行程序。


以上就是你寫(xiě)的代碼經(jīng)過(guò)“編譯”和“鏈接”生成可執(zhí)行程序的過(guò)程。


所以你遇到的錯(cuò)誤其實(shí)不是編譯錯(cuò)誤,而是鏈接錯(cuò)誤。

你的 IDE 試圖把?類(lèi)外定義2.cpp 編譯后就生成可執(zhí)行程序,于是鏈接器就報(bào)了“找不到 getName 函數(shù)”等錯(cuò)誤——因?yàn)檫@些函數(shù)是定義在另一個(gè)編譯單元(Teacher.cpp)中的嘛。 同理,你在單獨(dú)編譯?Teacher.cpp 后鏈接器報(bào)的錯(cuò)是找不到 main 函數(shù)。

其實(shí)你需要把這兩個(gè)編譯單元(類(lèi)外定義2.cpp 和 Teacher.cpp)的編譯結(jié)果都交給鏈接器,而具體如何“交給”是你的 IDE 的事。

?就像我在前面回答中所說(shuō),一般 IDE 都會(huì)以“工程”為單位來(lái)組織代碼。你要把所有源碼都放到“工程”中,這樣 IDE 在鏈接時(shí)才知道到底有哪些代碼要參與鏈接。

我猜你是沒(méi)設(shè)置好這個(gè)“工程”。

查看完整回答
2 反對(duì) 回復(fù) 2017-08-22
?
楓楓噠

TA貢獻(xiàn)11條經(jīng)驗(yàn) 獲得超8個(gè)贊

還有一種更簡(jiǎn)便的方法,就是文件引用teacher.cpp,不引入teacher.h

查看完整回答
2 反對(duì) 回復(fù) 2017-08-22
  • 天將明96
    天將明96
    別人要的就是這種分文件的形式啊,這是跟著老師做實(shí)驗(yàn)
?
snowmanJS

TA貢獻(xiàn)89條經(jīng)驗(yàn) 獲得超53個(gè)贊

用visual studio 2017就沒(méi)問(wèn)題了

查看完整回答
反對(duì) 回復(fù) 2017-08-23
?
Y丶點(diǎn)點(diǎn)

TA貢獻(xiàn)1條經(jīng)驗(yàn) 獲得超0個(gè)贊

你可以試一下直接在頭文件里面添加那個(gè)頭文件,不用改后綴

我看過(guò)這個(gè),c++遠(yuǎn)征-封裝篇上,5,2上面又講

他是另外創(chuàng)建了一個(gè)頭文件和一個(gè)源文件

查看完整回答
反對(duì) 回復(fù) 2017-08-22
?
楓楓噠

TA貢獻(xiàn)11條經(jīng)驗(yàn) 獲得超8個(gè)贊

因?yàn)閠eacher.h中其實(shí)是沒(méi)有包含teacher.cpp里的內(nèi)容的,所以在最后main函數(shù)里會(huì)提示沒(méi)有定義函數(shù),需要把teacher.cpp里的函數(shù)拷貝到teacher.h里,之后再補(bǔ)全main里面用到的引用函數(shù)就可以運(yùn)行

查看完整回答
反對(duì) 回復(fù) 2017-08-22
  • 慕瓜6658770
    慕瓜6658770
    我把Teacher.cpp的放到Teacher.h里了,可以正常運(yùn)行。但是我看的慕課網(wǎng)的教程里,老師就是把類(lèi)的聲明和定義放在兩個(gè)文件呀,我這個(gè)形式和老師完全一樣哇,(老師用的另一個(gè)編譯器)
  • 楓楓噠
    楓楓噠
    可以直接引用cpp文件,不引用h文件,這樣就可以。因?yàn)閏pp文件里同時(shí)包含了h文件以及函數(shù)聲明
  • 慕瓜6658770
    慕瓜6658770
    我按照你這個(gè)是好的,但是這樣就不算分文件類(lèi)外定義了吧,而且,為什么老師的代碼是主函數(shù)#include <Teacher.h>可以呢
點(diǎn)擊展開(kāi)后面3
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

我沒(méi)有用過(guò)這個(gè) IDE,不過(guò)你確定 Teacher.cpp 也同時(shí)編譯并且鏈接了嗎?

查看完整回答
反對(duì) 回復(fù) 2017-08-22
  • 慕瓜6658770
    慕瓜6658770
    同時(shí)編譯是啥意思? Teacher編譯的時(shí)候也是報(bào)同樣的錯(cuò)。。
  • 慕瓜6658770
    慕瓜6658770
    哦哦 我同時(shí)編譯了,還是一樣的錯(cuò)
  • onemoo
    onemoo
    我剛才說(shuō)“同時(shí)”指的是這兩個(gè)cpp都要編譯并且要鏈接在一起,先別管我的用詞問(wèn)題了。 你貼圖中的報(bào)錯(cuò)是在編譯"類(lèi)外定義2.cpp"時(shí)報(bào)的,那么你說(shuō)的“Teacher編譯的時(shí)候也是報(bào)同樣的錯(cuò)”是什么意思? 你單獨(dú)編譯 Teacher.cpp 時(shí)也會(huì)報(bào)錯(cuò)嗎?
點(diǎn)擊展開(kāi)后面5
  • 5 回答
  • 1 關(guān)注
  • 3159 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)