c++析构函数运行报错:error LNK2019: 无法解析的外部符号 “public: __thiscall student::~student(void)“ (??1student@@QAE@X

我先举一个错误的例子看看我们的代码有没有相似之处:

#include<iostream>
#include<string>


using namespace std;
class student {
	int m_nu;
	string m_name;
public:
	student() {
		cout << "默认构造函数的创建" << endl;

	}
	student(int m, string n) :m_nu(m), m_name(n) {}
	~student();
	friend void xianshi(const student& p) ;
};

//student::student(int m, string n) :student(m_nu, m_name) {};
void xianshi(const student& p) {
	cout << p.m_nu << ":" << p.m_name << endl;
}
void test() {

	student p1;
	student p2(1, "xiaoyun");
	xianshi(p2);
	p1 = p2;
	xianshi(p1);
	
		
	
	//xianshi(p2);


}


int main() {

	test();

	return 0;
}

乍一看,代码写的很完整啊,没有任何问题,构造和析构函数都已经写好了的,但是一旦运行就会出现以下的错误:

1>------ 已启动生成: 项目: c++类练习, 配置: Debug Win32 ------
1>类和动态内存分配.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall student::~student(void)" (??1student@@QAE@XZ),该符号在函数 "void __cdecl test(void)" (?test@@YAXXZ) 中被引用
1>C:\Users\Xiaoyun\source\repos\c++类练习\Debug\c++类练习.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>已完成生成项目“c++类练习.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========

编译器说我的错误在于,我的析构函数被引用了。 ~~~~~~~~~~~~~这当然啦,我不引用他我写他干嘛???逗编译玩吗!!
后来我多方查证,但都没有啥好的效果,于是我转向类定义和声明的这一部分,我突然想到一件事:类中定义的东西,如果要用的话,是不是一定要先声明一下呢??? 本着实践是检验真理的唯一标准,我试了一下,对~student()写了一个声明,你猜如何,没问题了。
所以我们在写程序的时候,不要一味的觉得,我明白这个东西怎么用了,这个想法是不行的,还得动手去操作,用实践去检验自己的想法。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值