• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
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上面又讲
他是另外创建了一个头文件和一个源文件

使用道具 举报

发新帖

发布任务需求已有1031288位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!