[問題] 運算子=的多載

看板C_and_CPP (C/C++)作者 (neo)時間16年前 (2009/04/23 15:06), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/1
程式碼如下: #include <iostream> using namespace std; class CWin { private: char id,*title; public: CWin(char i='D',char *text="Default window"):id(i) { title=new char[50]; strcpy(title,text); } void set_data(char i,char *text) { id=i; strcpy(title,text); } void show(void) { cout << "Window " << id << ": " << title << endl; } ~CWin() { delete [] title; } CWin(const CWin &win) { id=win.id; strcpy(title,win.title); } void copy_id(CWin &win) { id=win.id; } void copy_title(CWin &win) { strcpy(this->title,win.title); } }; void operator=(CWin &win1,CWin &win2) { win1.copy_id(win2); win1.copy_title(win2); } int main(void) { CWin win1('A',"Main window"); CWin win2; win1.show(); win2.show(); win1=win2; win1.show(); win2.show(); return 0; } 我把operator=()函數寫成一般函數 但是出現錯誤訊息入下: error C2801: 'operator =' must be a <Unknown> member 請問是哪裡有問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.46.188

04/23 15:19, , 1F
沒宣告friend
04/23 15:19, 1F

04/23 15:30, , 2F
可是我是要寫成一般函數 所以沒用friend
04/23 15:30, 2F

04/23 15:48, , 3F
那意思便是不能這樣寫。
04/23 15:48, 3F

04/23 16:00, , 4F
要不就friend要不就member...
04/23 16:00, 4F

04/23 19:01, , 5F
講一講一直覺得不對...operator=要是member....
04/23 19:01, 5F

04/23 23:36, , 6F
我想你要的是 CWin& operator=(const CWin& win2);
04/23 23:36, 6F

04/23 23:37, , 7F
如果不是friend 對於物件的assign 沒有兩個參數的吧
04/23 23:37, 7F

04/23 23:38, , 8F
就程式來說 兩個都是CWin, 也沒什麼必要變成friend了
04/23 23:38, 8F
文章代碼(AID): #19y1E7Vs (C_and_CPP)
文章代碼(AID): #19y1E7Vs (C_and_CPP)