2013-08-06 31 views
1

我想繼承一個名爲TCPSocket的類與類的用戶。儘管事實上,我使用IFNDEF我得到的消息: 「用戶::用戶(INT,SOCKADDR_IN,SOCKADDR_IN)」以前這裏定義在Linux上的C++ gcc inheritence

這是從我的頭文件:

#ifndef USER_H_ 
#define USER_H_ 

#include <string.h> 
#include "TCPSocket.h" 


class User : TCPSocket { 
string _U_Name; 
string _in_session; 
string _in_room; 

public: 
User(int connected_sock,struct sockaddr_in server_addr, struct sockaddr_in peer_addr) 
:TCPSocket(connected_sock,server_addr, peer_addr); 
    virtual ~User(); 
}; 

#endif /* USER_H_ */ 
+0

也許你的部分實現的構造函數令編譯器感到困惑。你需要給它一個正文,因爲你已經有了一個構造函數初始化列表。在h文件中工作的 – juanchopanza

回答

1

你需要從你的頭文件中刪除基類initaliser並將其移動到您的實現,即去除的TCPSocket(...)

6

你的構造函數是在頭文件部分實施:

User(int connected_sock, sockaddr_in server_addr, sockaddr_in peer_addr) 
: TCPSocket(connected_sock,server_addr, peer_addr); 

要麼刪除初始化列表,如果你在.cpp文件所採用的構造:

User(int connected_sock, sockaddr_in server_addr, sockaddr_in peer_addr); 

或通過增加身體完成實施,並確保它是不在.cpp定義

User(int connected_sock, sockaddr_in server_addr, sockaddr_in peer_addr) 
: TCPSocket(connected_sock,server_addr, peer_addr) 
{ 
    .... 
} 

請注意,在C++中,您不必在整個地方輸入struct。另請注意,默認情況下,class的繼承是private,所以您正在私下繼承。

+0

implementationaion。非常感謝!! :) – user2656851