• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

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

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

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

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

使用道具 举报

全部参与3

在 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就没问题了

使用道具 举报

发新帖

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

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

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