欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

include.cpp(main函数的cpp文件)文件中包含另一个.cpp文件的错误及原因

发布时间:2025/3/15 22 豆豆
生活随笔 收集整理的这篇文章主要介绍了 include.cpp(main函数的cpp文件)文件中包含另一个.cpp文件的错误及原因 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

当一个main函数的cpp文件包含另一个cpp文件,使用#include "data.cpp"  是不可以的,例如下面

include.cpp

#include <stdio.h> #include "data.cpp" //extern void add(); void main() {#include "include.h"#include "yingcheng.itcast"add();getchar();}

 

data.cpp 文件

#include "data.h" #include <stdio.h> void add() {int c = a + b;printf("\n");printf("%d", c);}

data.h

#pragma once int a = 10; int b = 20; int c;

yingcheng.itcast

#pragma once printf("俞文龙真是牛,跟着龙哥学c在也不用担心c学不会");

include.h

#pragma once printf("jajklsjklsdjkjskljdsadf");

这是我们使用了#include "data.cpp"  这样包含一个cpp文件会发现报错,竟然编译不通过

 

于是我就查阅了往事的资料,网上资料是这样说的cpp文件是独自编译的。举例如下

因为在工程编译的时候各个.cpp文件依次单独编译,最后才连接到一起,当在编译include.cpp文件时,看到include.cpp文件中有#include "data.cpp" 文件时就把data.cpp中的内容和include.cpp一起编译生成include.obj文件。别忘了data.cpp文件也是.cpp文件也要单独编译,编译完data.cpp文件生成data.obj文件后。再将所有编译后的.obj文件连接到一生成.exe文件。这时就会发现data.obj中的内容data.obj中也有(因为include.cpp中 #include"ata.cpp")。所以会出现重复定义的错误。

这时你可能又会想到把data.cpp文件改名为data.h在include.cpp文件中#include "data.h" 不就行了。因为.h文件不会单独编译。确实是这样。将data.cpp改为data.h后不管工程目录中有没有添加data.h文件都可以。可是前面说了.h文件中最好只放声明。

总结一下:要想把自己实现的函数放到同一个文件中调用,如果放在.h文件中违背了.h文件最好只放声明的原则。如果放在.cpp文件中在include.cpp中 #include相应的.cpp文件则不能将这个.cpp文件添加到工程目录下,这样看起来又不像是一个整体(凭什么哪个.cpp文件就不能出现在工程目录下)

到底是不是这样我们也不知道,具体的解决方案是什么?答案是extern   

extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示变压器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。
关于extern更详细的解释请看百度百科 所以我们只需这样:如果在include.cpp中要调用data.cpp中的函数,不要在include.cpp中#include "data.cpp" ,只需在include.cpp中声明一下要调用的函数,并且声明前加关键字extern

废话不多说,下面我就试一把,修改代码如下:

#include <stdio.h>extern void add(); void main() {#include "include.h"#include "yingcheng.itcast"add();getchar();}

编译成功

 

输出结果:

好了,关于cpp文件引入另一个cpp文件报错讲解结束,如果你觉得我写的可以请关注我的博客

总结

以上是生活随笔为你收集整理的include.cpp(main函数的cpp文件)文件中包含另一个.cpp文件的错误及原因的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。