假設我們有add.h add.cpp和main.cpp。
您需要添加main.cpp和add.cpp的原型。 main.cpp需要它,因爲它想使用類add和add.cpp需要它,因爲它想要實現它,因此需要它的原型。這是通過包含頭文件來完成的。 在add.cpp和main.cpp中都做#include「add.h」。
現在編譯器開始生成兩個對象文件,即main.o和add.o.所以仍然主要只知道添加,內部機制(實現)仍然不存在。之後,鏈接器將main.o和add.o合併到一個可執行文件中,該文件具有從main添加的所有鈴聲和哨聲。
編譯完每個目標文件後都知道名字。鏈接之後,他們實際上知道如何通過名稱(他在哪裏(實現)所在的位置調用它們)。
在編譯器之前,我們有另一個叫做預處理的步驟,其中一個步驟是複製#include後的文件內容
不管你怎麼調用add.h都沒關係,但是你必須在main.cpp和add.cpp中包含正確的文件,不管你怎麼調用add。 cpp或者main.cpp無關緊要,只有你的編譯器必須被告知它們是如何被調用的,例如在Visual Studio中,這是通過在你的項目文件中重命名來自動完成的,如果使用gcc,你必須指示你的編譯器,你自己做鏈接器,在這個特定的情況下,你可以做以下事情:
編譯add.cpp到add.o:
gcc -c add.cpp
編譯main.cpp中到main.cpp中:
gcc -c main.cpp
鏈接add.o和main.o成myniceprogram:
gcc -o myniceprogram add.o main.o
哪個編譯器/你在用IDE嗎? 底下,這實際上是一個依賴管理工具的工作,也許有一個Makefile或類似的東西 – KarlM
你在編譯這個? –
來自Java的背景,呃?從1999年開始授權程序員:-)順便說一句,你的'add.cpp'不會「聲明原型」(頭部已經這樣做),而是*定義了函數*。 –