我在自定义数据类型数组上为mergesort编译此代码时遇到了一些问题。未定义的引用是对
的响应mergesort(hw1type*, int)
以下是相关的代码片段,其中列出了包含内容,以及不知道的内容,我知道所有内容都有效:
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
我需要将mergesort.o添加到OBJ字段,但除此之外的其他内容?考虑到C ++已经有一段时间了,因为我已经搞乱了make文件,所以已经有一段时间了。
答案 0 :(得分:1)
&#34;未定义的参考&#34;是一个链接时错误。确保包含缺失函数的目标文件是链接命令行的一部分。在你的情况下,可能是这样的:
clang++ -o app main.o mergesort.o
或者简单地说:
clang++ -o app main.cc mergesort.cc
如果你没有先单独编译每个文件。
答案 1 :(得分:0)
您没有将mergesort.cc
编译为目标代码,和/或您没有在该目标代码中进行链接。
如果您使用的是IDE,请确保已将mergesort.cc
添加到项目配置中;如果您在命令行上使用Makefile或编译,请确保将其包含在您正在编译的源文件列表中。