[問題] 怎麼用friend方式寫operator=
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
最近在自己看書練習C++
有一題習題是叫我把運算子=的多載移出類別外,設定成friend友誼函數
可我怎麼設定都沒辦法編譯,不清楚是哪裡出問題
所以上來問問各位大大
希望得到的正確結果:
希望成功把operator=()拿出類別外,當成friend友誼函數
程式跑出來的錯誤結果:
'void operator=(CWin&,const CWin&)' must be a non-static member function
ambiguous overload for 'operator=' in 'win1=win2'
開發平台:
Dev-C++, Windows vista
有問題的code)
#include <iostream>
#include <cstdlib>
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);
}
friend void operator=(CWin &win1,const CWin &win2) //!!!這裡有問題!!!
{
win1.id=win2.id;
strcpy(win1.title,win2.title);
}
};
int main(void)
{
CWin win1('A',"Main Window");
CWin win2;
win1.show();
win2.show();
win1=win2;
cout << endl << "設定win1=win2之後..." << endl;
win1.show();
win2.show();
win1.set_data('B',"Hello Window");
cout << endl << "更改win1的資料成員之後..." << endl;
win1.show();
win2.show();
system("pause");
return 0;
}
補充說明:
可以的話順便告訴我為什麼要用const呢?
不太懂他的意思
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.33.49.170
推
06/30 17:02, , 1F
06/30 17:02, 1F
→
06/30 17:07, , 2F
06/30 17:07, 2F
推
06/30 18:21, , 3F
06/30 18:21, 3F
→
06/30 18:22, , 4F
06/30 18:22, 4F
→
06/30 18:22, , 5F
06/30 18:22, 5F
→
06/30 18:48, , 6F
06/30 18:48, 6F
→
06/30 18:48, , 7F
06/30 18:48, 7F
→
06/30 18:52, , 8F
06/30 18:52, 8F
→
06/30 18:53, , 9F
06/30 18:53, 9F
→
06/30 18:55, , 10F
06/30 18:55, 10F
※ 編輯: HANDSOMEKAI 來自: 120.33.49.170 (06/30 19:03)
推
06/30 19:14, , 11F
06/30 19:14, 11F
→
06/30 19:15, , 12F
06/30 19:15, 12F
→
06/30 19:21, , 13F
06/30 19:21, 13F
→
06/30 19:42, , 14F
06/30 19:42, 14F
→
06/30 19:44, , 15F
06/30 19:44, 15F
→
06/30 19:45, , 16F
06/30 19:45, 16F
→
06/30 19:46, , 17F
06/30 19:46, 17F
→
06/30 19:50, , 18F
06/30 19:50, 18F
→
06/30 19:53, , 19F
06/30 19:53, 19F
→
06/30 19:57, , 20F
06/30 19:57, 20F
→
06/30 19:58, , 21F
06/30 19:58, 21F
→
06/30 19:59, , 22F
06/30 19:59, 22F
→
06/30 20:02, , 23F
06/30 20:02, 23F
→
06/30 20:03, , 24F
06/30 20:03, 24F
→
06/30 20:04, , 25F
06/30 20:04, 25F
→
06/30 20:07, , 26F
06/30 20:07, 26F
→
06/30 20:08, , 27F
06/30 20:08, 27F
→
06/30 20:57, , 28F
06/30 20:57, 28F
→
06/30 21:14, , 29F
06/30 21:14, 29F
→
06/30 21:14, , 30F
06/30 21:14, 30F
→
06/30 21:18, , 31F
06/30 21:18, 31F
→
06/30 21:48, , 32F
06/30 21:48, 32F
推
07/01 10:42, , 33F
07/01 10:42, 33F
→
07/01 11:23, , 34F
07/01 11:23, 34F