隨著程序的慢慢變大天吓,單一文件必然不能滿足我們的需求鲫凶,一個(gè)普遍的做法是多文件編程许布,這樣做的目的也是為了項(xiàng)目組織結(jié)構(gòu)更加清晰替废,代碼的可重用性變得更高箍铭。
一個(gè)多文件的例子
add.cpp:
int add(int x, int y)
{
return x + y;
}
main.cpp:
#include <iostream>
int main()
{
std::cout << "The sum of 3 and 4 is: " << add(3, 4) << std::endl;
return 0;
}
編譯以上代碼,你會(huì)發(fā)現(xiàn)程序并不會(huì)編譯成功椎镣,并且會(huì)報(bào)出與上一節(jié)課相同的錯(cuò)誤Use of undeclared identifier 'add'
,原因是:
解析器解析代碼文件的時(shí)候诈火,它不知道其他代碼文件里面的任何東西,也不會(huì)記住任何以前編譯過的代碼文件的東西状答,在這種情況下冷守,編譯器不知道新文件里面的add()函數(shù),也不記得以前編譯過的add()函數(shù)惊科,所以它給出的解釋就是拍摇,它根本不知道add()是什么東西。
該怎么解決這個(gè)錯(cuò)誤呢馆截?
我們想讓main.cpp文件知道add()函數(shù)是存在add.cpp文件的充活,為了能讓main.cpp文件能夠訪問add()這個(gè)函數(shù)蜂莉,我們需要使用前向聲明:
#include <iostream>
int add(int x, int y); //我們需要讓main.cpp知道add()是一個(gè)定義在某個(gè)地方的函數(shù)
int main()
{
std::cout << "The sum of 3 and 4 is: " << add(3, 4) << std::endl;
return 0;
}
值得注意的是:
不要在main.cpp里面#include "add.cpp"
,
這樣做會(huì)導(dǎo)致解析器把a(bǔ)dd.cpp里面的內(nèi)容直接插入到main.cpp里面,而不是把他們看作是獨(dú)立的文件混卵。