C++"未定义的引用"函数错误

C++ "undefined reference to" function error

本文关键字:函数 错误 引用 未定义 C++      更新时间:2023-10-16

我在为自定义数据类型数组上的mergesort编译此代码时遇到了一些问题。未定义的引用是对的响应

mergesort(hw1type*, int)

以下是相关的代码剪辑,省略了include和不包含的内容,我知道它们都有效:

Main(错误传播到的位置):

hw1type * unsorted_array2 = new hw1type[SIZE];
unsorted_array2 = create_random_hw1type(SIZE);
mergesort(unsorted_array2, SIZE);

mergesort.h:

hw1type* mergesort(hw1type*, int);
hw1type* merge(hw1type*, int, hw1type*, int);

mergesort.cc:

hw1type mergesort(hw1type* unsorted_array, int n)

我看不出函数的声明方式有什么问题,也看不出我在main中传递变量的方式有什么错误。但是,我已经有一段时间没有使用c++了,所以我可以使用第二双或第三双眼睛!

编辑:原来是make文件,我忘了更改。事情总是很简单。

啊,对了,我使用的是其他类附带的标准make文件。不管怎样,这是代码:

我可能应该把mergesort.o列入OBJ的名单,但还有什么吗?make文件如下所示:

CC=gcc
CXX=c++
CFLAGS=-ggdb -O3 -I. 
LDFLAGS=-L. -lcs600
OBJ=timer.o random_generator.o sort.o
cs600:  libcs600.a main.o
    $(CXX) $(CFLAGS) main.o -o hw1 $(LDFLAGS)
libcs600.a: $(OBJ)
    ar ru libcs600.a $(OBJ)
    ranlib libcs600.a
.cc.o:
    $(CXX) -c $(CFLAGS) $<

clean:
    @rm -f *.o
    @rm -f libcs600.a
    @rm -f hw1

我需要在OBJ字段中添加mergesort.o,但除此之外还有什么吗?考虑到C++已经有一段时间了,我真的有一段时期没有处理make文件了。

"未定义引用"是一个链接时间错误。确保包含缺失函数的对象文件是链接命令行的一部分。在你的情况下,可能是这样的:

clang++ -o app main.o mergesort.o

或者简单地说:

clang++ -o app main.cc mergesort.cc

如果你没有先单独编译每个文件。

您没有将mergesort.cc编译到目标代码中,和/或没有在该目标代码中进行链接。

如果您使用的是IDE,请确保已将mergesort.cc添加到项目配置中;如果您正在使用Makefiles或在命令行上进行编译,请确保将其包含在正在编译的源文件列表中。