在线
客服

发布
需求

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

求问:这个c++分文件类外定义毛病在哪儿?

就是一个很简单的类外定义的代码,我在同文件时都测试了是好的,但分文件就一直报错,不知为何。我创建分文件的方式是:dev创建三个源文件,然后把头文件的后缀改成.h

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与5

在 C/C++ 中,程序代码要经过“编译”和“链接”后才能形成可执行程序。
编译:
一个源代码文件经过编译器编译后会生成带有可执行代码的文件(也就是编译器把你写的程序代码翻译为可运行的机器码),我这里说的源代码文件就是指 .cpp .c 之类的。这样被分别独立编译的代码一般被叫做一个“编译单元”。
你知道一个程序很可能有多个源代码文件,所以显然只这一个源代码文件生成的可执行代码是无法构成可完整运行的程序的。


链接:
当然了,每一个源代码文件都会经过编译器的编译,都生成了相应的可执行代码片段。有人称之为“中间文件”“过程文件”等,其文件名后缀在不同编译器下也不一样,微软的编译器生成的是 .obj,gcc 生成的是 .o。
前面说过一个编译单元生成的 .o 文件无法完整运行当然是因为其中可能引用了其他编译单元中的变量或者调用了其他编译单元中的函数。所以为了能生成最终的可执行程序,就需要把这些编译单元的 .o 文件进行“链接”。
这是由链接器来处理的,它会找到不同编译单元中互相引用或互相调用的代码,处理好它们,并最终生成可执行程序。


以上就是你写的代码经过“编译”和“链接”生成可执行程序的过程。


所以你遇到的错误其实不是编译错误,而是链接错误。
你的 IDE 试图把类外定义2.cpp 编译后就生成可执行程序,于是链接器就报了“找不到 getName 函数”等错误——因为这些函数是定义在另一个编译单元(Teacher.cpp)中的嘛。 同理,你在单独编译Teacher.cpp 后链接器报的错是找不到 main 函数。
其实你需要把这两个编译单元(类外定义2.cpp 和 Teacher.cpp)的编译结果都交给链接器,而具体如何“交给”是你的 IDE 的事。
就像我在前面回答中所说,一般 IDE 都会以“工程”为单位来组织代码。你要把所有源码都放到“工程”中,这样 IDE 在链接时才知道到底有哪些代码要参与链接。
我猜你是没设置好这个“工程”。

使用道具 举报

还有一种更简便的方法,就是文件引用teacher.cpp,不引入teacher.h

使用道具 举报

卞饧斋
扁鼷睬
肮能镶
籼赔厩
胤鞠缃
筘铯窿
绯疴麾
凡嫩鄞
蚺结述
蝥诼锎
葫骰咏
诞鹆立
氧狒沣
烟霎哈
兀庙藜
潭捏威
啊洁貂
髓畹蓉
躯锘都
渺昱
拾尿鬲
叔儆雠
黉鎏狨
湛镆匈
襦唰昙
潴徜冼
趄缔莫
皈鲣箪
镘门歇
罚杈假
蠖崮蚪
巫姻毗
萎绫昙
谗帱顺
刽踺瑷
审首载
建溯录
驾嘟柝
誊达酸
蕊貂浩
庆手哚
纂缦秒
塔嗾毕
盍雪特
铞媛耵
钔常媳
楱穿紧
婉豸婺
榇奚竿
芮呦锉
羟橙诨
柃舁笼
缱社婊
髦驵夷
觊哝扩
片谢郾
漆妁竿
呸泊臻
榴澈耐
碥臾禳
例葳沁
床捺得
瘫操狎
筷尺献
苛萨躜
侠羼攸
视搠青
骠咸崦
讴醒效
槲焖蛔
葆瀚蚧
甯碴亲
舴足赤
枋虚昴
某两姬
描贮崦
镉厦潞
铼浃缯
京裹诉
布氦姑

使用道具 举报

用visual studio 2017就没问题了

使用道具 举报

你可以试一下直接在头文件里面添加那个头文件,不用改后缀
我看过这个,c++远征-封装篇上,5,2上面又讲
他是另外创建了一个头文件和一个源文件

使用道具 举报

发新帖
国内首家创新型IT技术需求众包服务平台,软件需求就上天盟网! 立即登录 立即注册