[英]C++ “undefined reference to” function error
我在為自定義數據類型數組上的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列表中,但還有其他內容嗎? 生成文件如下所示:
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文件,所以已經有一段時間了。
“未定義的參考”是鏈接時錯誤。 確保包含缺少功能的目標文件是鏈接命令行的一部分。 就您而言,可能類似於:
clang++ -o app main.o mergesort.o
或者簡單地:
clang++ -o app main.cc mergesort.cc
如果您沒有先分別編譯每個文件。
您沒有將mergesort.cc
編譯為目標代碼,和/或沒有鏈接該目標代碼。
如果使用的是IDE,請確保已將mergesort.cc
添加到項目配置中; 如果您使用Makefile或在命令行上進行編譯,請確保將其包括在要編譯的源文件列表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.