我在为一组自定义数据类型的归并排序编译这段代码时遇到了一些问题。 undefined reference 是对
的回应mergesort(hw1type*, int)
这里是相关的代码片段,省略了包含,以及我知道的所有工作之外的内容:
主要(错误传播到的地方):
hw1type * unsorted_array2 = new hw1type[SIZE];
unsorted_array2 = create_random_hw1type(SIZE);
mergesort(unsorted_array2, SIZE);
合并排序.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 列表中,但还有别的吗?生成文件如下所示:
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
我需要将 mergesort.o 添加到 OBJ 字段,但除此之外还有什么?考虑到 C++ 已经有一段时间了,自从我弄乱 make 文件以来真的有一段时间了。
最佳答案
“ undefined reference ”是链接时错误。确保包含缺失函数的目标文件是链接命令行的一部分。在你的情况下,可能是这样的:
clang++ -o app main.o mergesort.o
或者简单地说:
clang++ -o app main.cc mergesort.cc
如果您没有先单独编译每个文件。
关于C++ "undefined reference to"函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9087731/