C++程序中.cpp文件的一些问题

我们在任何时候编写程序的时候,文件的组织一定要结构性,这样的项目文件,源码会给人一个良好的可读性。
我们都知道C++程序都是从main函数开始执行的,我们当然可以把所有代码都写在main函数里,或者main.cpp文件(main函数所在的cpp文件)中。但是,如果,自定义的函数很多的话就会使得main.cpp代码异常的臃肿,可读性非常的差,很不清晰。同时,也不利于对项目的调试。
这时候就考虑将一些代码有条理放在别的文件文件中,当然,我们可以放在.h文件中,但是通常来说,.h文件中一般只包含函数声明、宏定义、结构体定义等内容,即只放声明的原则。因此,一些函数的定义,我们只能放在其他.cpp文件中。这时候就有了问题:
我定义了main.cpp和test.cpp,我需要在main.cpp中调用test.cpp中定义的函数,可这时候报错了:错了:
1>main1.obj : error LNK2005: "void __cdecl test01(void)" (?test01@@YAXXZ) 已经在 test01.obj 中定义
1>C:\Users\liuliu\Desktop\cpp\test\Debug\test.exe : fatal error LNK1169: 找到一个或多个多重定义

重定义错误,可是我在main.cpp中分明没有定义test.cpp中的? 最后才明白,C程序中各个.cpp文件是单独编译,编译完毕最后连接到一起。当在编译main.cpp文件时,看到main.cpp文件中的#include“test.cpp”语句时时,就会把test.cpp中的内容和main.cpp放在一起编译,生成一个main.obj文件。但是,由于test.cpp文件也是.cpp文件也要单独编译,编译完test.cpp文件生成test.obj文件。最后将所有编译后的.obj文件连接到一生成可执行的.exe文件。这时就会发现test.obj中的内容main.obj中也有。所以会出现重复定义的错。 解决方法:不适用#include “test.cpp”,只需在main.cpp文件中对要使用的函数等用extern关键字进行明。

//main.cpp
#include <stdio.h>

extern void test01();

void main()
{
    printf("hello\n");
    test01();
}
//test.cpp
#include <stdio.h>

void test01()
{
    printf("nihao\n");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值