C ++“未定义引用”函数错误

时间:2012-01-31 22:09:42

标签: c++ undefined

我在自定义数据类型数组上为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文件,所以已经有一段时间了。

2 个答案:

答案 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或编译,请确保将其包含在您正在编译的源文件列表中。