[問題] 要怎麼使用自己寫的CLASS?

看板C_and_CPP (C/C++)作者 (TAKUA)時間16年前 (2010/01/22 09:10), 編輯推噓6(6024)
留言30則, 8人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 寫了一個class, 有一個 .h 檔跟 .cpp 檔,都沒有問題 想要在一個新的檔案裡面include這個class 希望得到的正確結果: 可以執行 程式跑出來的錯誤結果: [Linker error] undefined reference to `polynomial::polynomial()' [Linker error] undefined reference to `polynomial::operator+(polynomial const&)' . . . . 總之就是說連不上我的class吧? 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ 有問題的code: (請善用置底文標色功能) #include <iostream> #include<cstring> #include<iomanip> using namespace::std; #include "HW5_B98901088-polynomial.h" int main(){ polynomial a, b; cin>>a>>b; cout<<a<<endl<<endl; cout<<b<<endl<<endl; cout<<a+b<<endl; system("PAUSE"); return 0; } 補充說明: class內容完全可執行,而且 class 的 .h 檔、.cpp檔跟這個連不上的 .cpp檔 都放在同一個資料夾裡面 請問要加些什麼才能夠執行呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.57.147.96

01/22 09:16, , 1F
你得要兩個 .cpp => 兩個 .obj => link 在一起變成一個 .exe
01/22 09:16, 1F

01/22 09:34, , 2F
.obj是指...?課本上面好像沒有用這種方式耶,怪哉
01/22 09:34, 2F

01/22 12:05, , 3F
你可能是定義了其他建構子, 忽略了預設建構子要自己寫
01/22 12:05, 3F

01/22 12:05, , 4F
operator + 這個成員函式沒定義, 仔細檢查參數型態
01/22 12:05, 4F

01/22 12:06, , 5F
他放在同一.cpp可以, 所以應該不是這個問題....@_@"
01/22 12:06, 5F

01/22 12:07, , 6F
他的問題在, 不了解compile出來的東西還需要link這個動
01/22 12:07, 6F

01/22 12:07, , 7F
作才能產出一個可執行binary; 如果IDE沒辦法自動幫你包
01/22 12:07, 7F

01/22 12:08, , 8F
可能就要學著了解一下makefile了, 檔案少是可以直接下
01/22 12:08, 8F

01/22 12:08, , 9F
cmd也無所謂就是了XD
01/22 12:08, 9F

01/22 12:09, , 10F
有呼叫卻沒定義函式, 編譯沒過當然不會連起來阿
01/22 12:09, 10F

01/22 12:11, , 11F
他的可執行不知道是哪方面的可執行
01/22 12:11, 11F

01/22 12:23, , 12F
樓上, 他是link沒過, 不是compile沒過:)
01/22 12:23, 12F

01/22 12:25, , 13F
他寫了a.h放宣告, a.cpp放定義, 在b.cpp引用了a.h想用
01/22 12:25, 13F

01/22 12:25, , 14F
a.*實作的class, 只要code沒包錯, b.cpp引用a.h這樣
01/22 12:25, 14F

01/22 12:26, , 15F
b.cpp compile是ok的, 問題在於沒有設好要把a.cpp與
01/22 12:26, 15F

01/22 12:26, , 16F
b.cpp各自compile出來的binary做link, 所以linker才會
01/22 12:26, 16F

01/22 12:26, , 17F
發error, 說找不到(應該寫在a.cpp, 至於a.obj之類的)的
01/22 12:26, 17F

01/22 12:27, , 18F
class實作找不到:)
01/22 12:27, 18F

01/22 12:28, , 19F
hmm~~binary做link~也許改成object file做link比較好Orz
01/22 12:28, 19F

01/22 12:34, , 20F
檔案沒放進專案嗎XD
01/22 12:34, 20F

01/22 12:46, , 21F
科科科~~我覺得是根本沒開專案....XD
01/22 12:46, 21F

01/22 14:09, , 22F
XD純推樓上....
01/22 14:09, 22F

01/22 18:20, , 23F
原來是專案,我試看看~
01/22 18:20, 23F

01/22 18:28, , 24F
是把三個檔案都放在同一個project嗎?
01/22 18:28, 24F

01/22 18:28, , 25F
這樣b.cpp可以compile,可是該跑的東西沒有跑出來耶
01/22 18:28, 25F

01/22 19:13, , 26F
可能是因為runtime error才會直接結束
01/22 19:13, 26F

01/22 20:10, , 27F
是哦,可是同樣的內容直接寫在a.cpp底下就可以執行耶
01/22 20:10, 27F

01/22 21:10, , 28F
建議你把所有程式碼貼出來,避免浪費大家時間
01/22 21:10, 28F

01/26 19:40, , 29F
cpp檔案都必須先編譯過 才能link
01/26 19:40, 29F

01/26 19:41, , 30F
有兩個cpp 就把兩個先compile 再build
01/26 19:41, 30F
文章代碼(AID): #1BMFiKwa (C_and_CPP)
文章代碼(AID): #1BMFiKwa (C_and_CPP)