编译链接错误undefined reference to

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

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

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

编译链接错误undefined reference to_第1张图片

这些函数都是我在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++编译器。不过这次我的程序有问题了:

编译链接错误undefined reference to_第2张图片

编译链接错误undefined reference to_第3张图片

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

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

玩了,路漫漫~~~~

你可能感兴趣的:(编译链接错误undefined reference to)