编译链接错误undefined reference to

都说c/c++坑多,今儿我碰到了一个小坑,但是无奈水平有限,这个小坑就干了我两个小时。首先说明的是,我学习c和c++是混着学的,没有仔细区分过。我估计大部分同学都是跟我一样吧。

今儿在Qt Creator里写了一个小项目,实现二叉堆。这个项目总共三个文件:heap.h heap.cpp 和main.c

注意我这三个文件的后缀名,在这样情况下我就编译了一下。oh my god!!编译时候连接错误!undefined reference to ***


这些函数都是我在heap.h里定义的,也在heap.cpp里实现了的。我在main.c里也include “heap.h"。也是就google了两个小时~~~无解。

不过我大致把问题定位在使用gcc编译还是用g++编译这个问题上。好了不卖关子了。

我的main.c是c后缀,所以Qt Creator默认调用gcc编译,gcc将工程中所有文件干C文件对待,所以就不会有我heap.cpp中实现的函数了,故undefined reference。

那么好,把main.c 后缀改为main.cpp重新编译,cheers编译通过。google上说,遇见cpp,GNU/gcc会调用g++去编译。

虽然问题解决了,但是好奇心驱使我将工程文件全部改为c,那么现在我的三个文件就是:heap.h heap.c main.c

这时显然是用的gcc编译的,也就是说用的c编译器而不是c++编译器。不过这次我的程序有问题了:



这个swap_values函数我经常用,在c++里肯定是没问题的。唯一的原因是c语言不支持引用类型的参数。google了一下果然如此。

在c语言里,swap_values这种交换参数变量的函数只能接受指针。

玩了,路漫漫~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值