簡體   English   中英

C ++“未定義引用”功能錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM