[問題] 關於寫自已用的函數...

看板C_and_CPP作者 (流浪者)時間15年前 (2010/08/30 14:28), 編輯推噓3(3018)
留言21則, 6人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 自已寫了一個函數在一個header file,在另一個檔案中呼叫時出錯。 希望得到的正確結果: 能正確的使用函數 程式跑出來的錯誤結果: [Linker error] undefined reference xxxx(函數名稱) 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dec C++ / windows 7 有問題的code: (請善用置底文標色功能) =================================main.c===================================== #include <stdio.h> #include <stdlib.h> #include "header1.h" extern int test_i; void show_float_arr(float* a, int size); int main(int argc, char *argv[]) { float a1[10]={1.1, 7.7, 2.2, 5.5 , 6.6, 0.0 , 8.8 , 4.4 , 9.9, 3.3 }; //show_float_arr(a1 , 10); //這一行出錯,想用在header1.h中自已寫的function printf("%d" , test_i); system("PAUSE"); return 0; } ================================header1.h================================ #include <Math.h> int test_i=13; //void show_float_arr(float* a, int size);傳入陣列的位址和大小,顯示這個陣列 void show_float_arr(float* a , int size) { int i; for(i=0 ; i<size ; i++ ) { printf("%f\n" , a[i]); } } 補充說明: 我寫了兩個檔案main.c和header1.h,在main.c中想試試看呼叫header1.h中自已寫的函式 不過一直compile 不過。但是main.c中呼叫外部的test_i確能顯示出正確的數字13... 後來試著建立project然後在project->project options 中Linker的parameters中加上 -lheader1看看是不是Linker出錯.. 不過錯誤變成: cannot find -lheader Id returned 1 exit status Google上大多都是講1)include標頭檔 2)標頭檔都是只有function prototype 我是把功 能寫在標頭檔裡.關於Linker的設定我也做了,不過還是無法順利compile。這應該是往後 寫程式的重要技巧(能用別人寫的function)我確不能完成....Orz.還請先進指點哪裡出錯 謝謝. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 72.229.53.41

08/30 14:36, , 1F
當然, 你的 main 裡面前二行已經有 stdio.h, stdlib.h
08/30 14:36, 1F

08/30 14:36, , 2F
到第三行呼叫自己寫的 xx.h 裡面又有 stdio.h stdlib.h
08/30 14:36, 2F

08/30 14:37, , 3F
解決 (1): 把 main 裡面的 stdlib.h, stdio.h 拿掉
08/30 14:37, 3F

08/30 14:37, , 4F
解決 2: 把 header.h 裡面的 stdio.h, stdlib.h 拿掉
08/30 14:37, 4F

08/30 14:38, , 5F
3. 最好是用 #ifndef...#define...#endif 改寫 .h
08/30 14:38, 5F

08/30 14:41, , 6F
另, 你的 main.c 根本沒有 #include ?header1.h"
08/30 14:41, 6F

08/30 16:40, , 7F
你打錯字了 囧|| "show_flaot_arr","show_float_arr"
08/30 16:40, 7F

08/30 18:41, , 8F
樓上眼尖!
08/30 18:41, 8F
※ 編輯: doomhammer 來自: 72.229.53.41 (08/30 19:12)

08/30 19:16, , 9F
謝謝大家...Orz已經改正打錯字的部份,也將重複include
08/30 19:16, 9F

08/30 19:17, , 10F
的標頭檔移掉了,不過還是出現[Linker error]undefined
08/30 19:17, 10F

08/30 19:18, , 11F
reference to 'show_float_arr'這個錯誤.還請大家幫忙.
08/30 19:18, 11F

08/30 21:13, , 12F
static int test_i=13; //add static
08/30 21:13, 12F

08/30 21:15, , 13F
extern void show_float_arr(float* a, int size);
08/30 21:15, 13F

08/30 21:27, , 14F
啊...過了.感謝樓上!!原來我錯在函式前面沒有加extern
08/30 21:27, 14F

08/30 21:28, , 15F
之前可能因為那個函式打錯確沒有查出來所以即使加了
08/30 21:28, 15F

08/30 21:29, , 16F
extern在前面也出錯,兩個地方改過就正確了.真是謝謝!!
08/30 21:29, 16F

08/30 21:32, , 17F
想再問一下,那什麼時候要在Linker中加上參數?我看googl
08/30 21:32, 17F

08/30 21:33, , 18F
e上是說在你有include 其他的library的時候要加,那我這
08/30 21:33, 18F

08/30 21:34, , 19F
次的例子呢?
08/30 21:34, 19F

08/30 22:26, , 20F
當要用到.dll or .so 就必須link
08/30 22:26, 20F

08/30 23:38, , 21F
按照原PO的寫法, 直接拿掉main.c的第5, 6行就行了 XD
08/30 23:38, 21F
文章代碼(AID): #1CUq-bcK (C_and_CPP)