[問題] 一個socket+class的語法

看板C_and_CPP作者 (羽嵐)時間15年前 (2010/06/13 13:44), 編輯推噓4(408)
留言12則, 7人參與, 最新討論串1/2 (看更多)
class CClientSocket : public CSocket { private: char *pClientIP; u_short clientPort; public: CClientSocket(CServerDlg *pServDlg); virtual ~CClientSocket(); void setSourse(char *ip,u_short port); char getIP(); u_short getPort(); }; void CClientSocket::setSourse(char *ip,u_short port) { *pClientIP=*ip; clientPort=port; } char CClientSocket::getIP() { return *pClientIP; } u_short CClientSocket::getPort() { return clientPort; } 我想寫一個可以在送訊息的時候 同時顯示ip跟port 可是現在有個問題就是 void CServerDlg::ProcessPendingAccept() { //建立一個客戶端Socket物件 CClientSocket *pClientSocket = new CClientSocket(this); SOCKADDR_IN clientAddr; char *pClientIP = inet_ntoa(clientAddr.sin_addr); u_short clientPort = ntohs(clientAddr.sin_port); int socketLen = sizeof(SOCKADDR_IN); m_pListenSocket->Accept(*pClientSocket,(SOCKADDR*)&clientAddr, &socketLen);//接受客戶端的連接 //記錄ip跟port *pClientSocket->setSourse(*pClientIP,clientPort); //將客戶端Socket加入list EnterCriticalSection(&m_cs); m_listClientSocket.push_back(pClientSocket); LeaveCriticalSection(&m_cs); } 就是我在執行以上的程式碼的時候 *pClientSocket->setSourse(*pClientIP,clientPort); 這一行compile始終不會過=.= 我把pClientIP的*拿掉他會顯示illegal indirection 不拿掉會顯示cannot convert parameter 1 from 'char' to 'char *' 請問這要如何修改啊? -- 那怕是一點點自以為是的紀念 http://www.wretch.cc/blog/sgmp2555029 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.127.186.9

06/13 22:06, , 1F
原本就是char*了你怎麼會加一個*變char呢?
06/13 22:06, 1F

06/13 22:06, , 2F
拿掉試試看
06/13 22:06, 2F

06/13 22:17, , 3F
請問你在講哪裡的char* ...
06/13 22:17, 3F

06/13 22:22, , 4F
*pClientIP=*ip; ←pClientIP跟ip不都是char *嗎?
06/13 22:22, 4F

06/13 22:22, , 5F
會不會是這行的問題
06/13 22:22, 5F

06/13 22:22, , 6F
*pClientSocket->setSourse(pClientIP,clientPort);
06/13 22:22, 6F
COMPILE一樣不會過 錯誤訊息會顯示 illegal indirection

06/13 22:42, , 7F
你的程式裡pointer都亂用!?
06/13 22:42, 7F

06/13 22:47, , 8F
get/set 就不用 class 了, setSource, 不是 sourse
06/13 22:47, 8F

06/13 22:48, , 9F
getIP() 應該是回傳 string (char * in your case)
06/13 22:48, 9F
pClientIP跟clientPort都是private的 為什麼不用class? ※ 編輯: kuro44776 來自: 140.127.186.9 (06/13 23:00)

06/13 23:43, , 10F
沒有提供多一層抽象化, 用set/get 還不如弄成public
06/13 23:43, 10F

06/13 23:44, , 11F
另外, CClientSocket 如果是 model, 那傳進 CServerDlg
06/13 23:44, 11F

06/13 23:45, , 12F
就變成 model 與 view 切不乾淨 => MVC
06/13 23:45, 12F
文章代碼(AID): #1C5E2nPW (C_and_CPP)
文章代碼(AID): #1C5E2nPW (C_and_CPP)