Dev-c++中将头文件和头文件函数分离,编译主函数跳出undefined reference to 的问题解决

 

更新时间:2022.5.13  8:00

在学习谭浩强c++第三版面向对象编程,第二章习题四中:

需要实现三个文件分离,主函数(.cpp),类的声明(头文件),对成员函数定义文件(.cpp)

单在使用Dev-C++实现中,发现在编译一直出现undefined reference to set_value,也就是提示我们定义的这个函数未定义,但是我们定义了,所以应该是我们没有无法链接到函数实现文件。

解决方法一:使用visual studio 2022 编译器进行编译

源代码:

类的声明:

#include<iostream>
#include<string.h>
#include<string>
using namespace std;
//Student.h
class Student
{
private:
	int num;
	string name;
	char sex;
public:
	void set_value();
	void show_value();
};

成员函数定义

#include<iostream>
#include"类.h"
using namespace std;
void Student::set_value()
{
	cin >> num >> name >> sex;
}
//先编译此文件 
void Student::show_value()
{
	cout << "num:" << num << "name:" << name << "sex:" << sex;
}

主函数:(特别解释:主函数第一段的#define 是为了使用printf和scanf(visual stdio 2022 认为其不安全不能使用,需要引入这个宏定义))

#define _CRT_SECURE_NO_WARNINGS
#include<iostream> 
#include"类.h"

using namespace std;

int main()
{
	Student s1, s2;
	s1.set_value();
	s2.set_value();
	s1.show_value();
	s2.show_value();


	return 0;
}

问题解决:

解决方法二:

因为在dev-c++中,系统是一个文件一个文件查找,就是说如果你要用这个类,或者这个函数,你都需要引入定义该函数实现的文件或声明该类的文件,比如我们在使用cout,cin函数进行提取插入流进行输入输出时一样,需要进行预处理指令#include<iostream>引入输入输出流函数。

所以在dev-c++应该依次引入文件。代码如下:

1、成员函数定义文件    define.cpp  

#include<iostream>
#include"class.h"
using namespace std;
void Student::set_value()
{
	cin >> num >> name >> sex;
}
//先编译此文件 
void Student::show_value()
{
	cout << "num: " << num << "name: " << name << "sex: " << sex<<endl;
}

2、类声明文件  class.h

#include<iostream>
#include<string>
using namespace std;

class Student
{
private:
	int num;
	string name;
	char sex;
public:
	void set_value();
	void show_value();
};

3、主函数文件  main.cpp (这里引入了.cpp , 而 Vscode 则是引入 class.h 

#include"define.cpp" 
#include<iostream> 
using namespace std;

int main()
{
	Student s1, s2;
	s1.set_value();
	s2.set_value();
	s1.show_value();
	s2.show_value();


	return 0;
}

编译运行结果如图:

 我们来分析一下:

这里的主函数引入了define.cpp文件,相当于把define.cpp函数实现文件插入到main.cpp中,而在define.cpp文件中又引入类声明文件class.h,此时又相当于class.h函数又插入到main.cpp,所以综上相当于三个文件合在一起了。

总结:

在dev-c++中是一个一个文件查找,需要使用相应文件功能就需要引入。而在visual studio 2022 是创建文件是一个工程,在引入头文件中,如果在该头文件有函数声明,那么在使用该头文件中,vscode强大的链接功能会自动查找相应函数实现文件(只在当前目录下查找)。

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机魔术师

在校大二学生,请多多指教

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值