c ++ over linux gcc继承

时间:2013-08-06 12:58:20

标签: c++ linux inheritance

我正在尝试使用类user继承一个名为TCPSocket的类。尽管我正在使用ifndef,但我收到了消息: 先前在这里定义的'User :: User(int,sockaddr_in,sockaddr_in)

这来自我的头文件:

#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_ */

2 个答案:

答案 0 :(得分: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,因此您将私下继承。

答案 1 :(得分:1)

您需要从头文件中删除基类初始化器并将其移动到您的实现中,即删除TCPSocket(...)