牛骨文教育服务平台(让学习变的简单)
博文笔记

Learning C++之1.8 多个文件的程序

创建时间:2018-04-10 投稿人: 浏览次数:149

当程序非常大的时候,我们会将程序分布在很多文件之中,为了方便复用和管理。使用IDE的一个很大的优势是把多个文件的项目更加易于管理。你已经知道了单个的文件怎么编译管理,在这个基础上再增加一个文件非常易于处理。

一个多文件的程序的例子:

add.cpp

//#include "stdafx.h" // uncomment if using Visual Studio
 
int add(int x, int y)
{
    return x + y;
}

main.cpp

//#include "stdafx.h" // uncomment if using Visual Studio
#include <iostream>
 
int main()
{
    std::cout << "The sum of 3 and 4 is: " << add(3, 4) << std::endl;
    return 0;
}

你自己编译这个程序,会发现编译不通过。会上报如下的错误:

main.cpp(6) : error C3861: "add": identifier not found

当程序编译的时候,他并不知道其他的代码文件中的内容,或者对于之前的编译文件有任何记忆。因此当你编译main.cpp的时候,其实并不知道之前编译过add.cpp。因此就会找不到add.cpp。

这种有限的记忆性对于程序来说是必要的,为此各个文件中的重名函数,变量不会有冲突。下一节课我们将会学习一个例子。

然而,在这种情况下我们想让main.cpp知道add.cpp的存在,我们就需要在main.cpp里面做一个声明。

带有提前声明的main.cpp

//#include "stdafx.h" // uncomment if using Visual Studio
#include <iostream>
 
int add(int x, int y); // needed so main.cpp knows that add() is a function declared elsewhere
 
int main()
{
    std::cout << "The sum of 3 and 4 is: " << add(3, 4) << std::endl;
    return 0;
}

现在编译main.cpp他就知道add函数是在其他地方定义的函数了。用这种方法就可以知道add函数的入口。

你可以自己尝试一下编译main.cpp和add.cpp。

错误的情况:

第一次编译多文件的代码,很有可能碰到错误。如果你尝试上面的例子,并且碰到了一些错误,可以尝试一下下面的解决方案:

1.编译错误,找不到add函数,你可能没有在main中作提前声明

2.如果碰到一个链接的错误如下:

unresolved external symbol "int __cdecl add(int,int)" (?add@@YAHHH@Z) referenced in function _main

2a.最有可能的原因是你的add.cpp没有正确地加载到项目中来,如果你用IDE的话,你会在显示列表中发现有add.cpp文件添加在显示栏里才是正确的。

2b.可能add.cpp你添加错项目了

2c.文件可能设置成了不便宜或者不链接。检查文件的属性,确保是可编译可连接的。

3.如果你使用的是VS,请在每个文件设置“stdafx.h”包含进来。

4.不要直接使用include“add.cpp”的方式,他会将该文件直接添加进来,而不是以分开的方式运行。虽然这样可以执行,但是之后会非常不方便。

总结:

当文件编译的时候可能会以任何顺序来编译,而且编译的时候并不知道其他文件的存在。

我们将会在以后的面向对象编程的过程中遇到很多种情况都是多文件的编程,所以现在就掌握添加文件到你的项目中非常重要。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。