1.8 多文件程序

from http://www.learncpp.com/cpp-tutorial/18-programs-with-multiple-files/

当程序变得越来越大的时候,为了更好的组织,通常将它分为多个文件。使用IDE工作的一个优势在于利用它进行多文件项目的实施是很简单的。你已经知道了如何创建编译单文件项目。把新的文件加入到已经存在的项目中是很简单的。

在Visual Studio 2005 Express,在解决方案的资源管理器中右键"source files",选择添加新的项目。给出新文件的名称,然后它将会添加到你的项目中。

在Code::Blocks中也用类似的方式进行添加。

想以前一样编译你的程序。不会比这更简单了。

现在考虑一下下面多个文件:

add.cpp:

   1: int add(int x, int y)
   2: {
   3:     return x + y;
   4: }

 

main.cpp

   1: #include <iostream>
   2:  
   3: int main()
   4: {
   5:     using namespace std;
   6:     cout << "The sum of 3 and 4 is: " << add(3, 4) << endl;
   7:     return 0;
   8: }

当你编译这个程序的时候,会发现它并没有通过编译,并且给出了一些编译错误。

add.cpp(10) : error C3861: 'add': identifier not found

add.cpp(15) : error C2365: 'add' : redefinition; previous definition was 'formerly unknown identifier'

 

(译者注:此处的第10行第15行与给出的代码行并不一致)

当编译器编译代码文件时,它并不知道函数存在在其它的文件里。所以在不同文件中含有相同名称的函数或是变量并不会引起纠纷。

但是,在这个例子中,我们想要然编译器知道函数add存在于add.cpp文件中。将main.cpp链接到add函数,我们使用前置声明。

带前置声明的main.cpp:

   1: #include <iostream>
   2:  
   3: int add(int x, int y); // forward declaration using function prototype
   4:  
   5: int main()
   6: {
   7:     using namespace std;
   8:     cout << "The sum of 3 and 4 is: " << add(3, 4) << endl;
   9:     return 0;
  10: }

现在,当编译器编译main.cpp的时候,它会知道add是什么。使用这种方法,我们能够将文件联系到函数所在的文件。但是,当项目变得越来越大的时候,每个文件中使用函数前的前置声明变得越来越让人厌烦。为了解决这个问题,头文件的概念将被介绍,我们讨论问文件在头文件一节中。

试着编译add.cpp和main.cpp。当我们在面向对象编程的时候会使用到很多多文件的情况,因此现在应该确保自己能够理解如何讲一个文件添加到你的项目中并通过编译执行。

你可能感兴趣的:(文件)