C ++ 클래스 - 파생 클래스의 생성자 선언
-
23-08-2019 - |
문제
소켓에는 Winsock 소켓을 매개 변수로 가져 와서 개인 변수에 저장하는 생성자가 있습니다.
Socket::Socket(SOCKET s) {
this->s = s;
}
내 소켓 클래스에서 데이터를 구문 분석 할 클래스 "Gamesocket"을 만들려고합니다.
class GameSocket : public Socket {
protected:
void ParseData(unsigned char* data, int size);
};
이 클래스 옆에는 필요할 때 새 소켓을 만드는 "서버"클래스가 있습니다.
GameSocket* Server::Accept() {
SOCKET a = accept(s, 0, 0);
if(a==SOCKET_ERROR) {
return 0;
}
else {
return new GameSocket(a);
}
}
그러나 이것은 마지막 "else"에 대한 오류를 제공합니다.
error C2664: 'GameSocket::GameSocket' : cannot convert parameter 1 from 'SOCKET' to 'const GameSocket &'
파생 수업을 다룰 때 생성자와 무언가를 놓치고 있어야합니다 ...
나에게 너무 열심히 가지마, 나는 C ++와 OOP에 비교적 새로운
해결책
Gamesocket의 생성자를 추가하십시오
class GameSocket : public Socket {
public:
// you need to add
GameSocket(SOCKET s) : Socket(s) {}
protected:
void ParseData(unsigned char* data, int size);
};
다른 팁
Gamesocket의 Compurucotr는 소켓 매개 변수를 수신 한 다음 이니셜 라이저 목록의 소켓 기본 클래스로 전달해야합니다.
class GameSocket : public Socket {
public:
GameSocket(SOCKET s) : Socket(s) {}
...
};
Gamesocket이 소켓에 대한 참조를 유지하는 대신 소켓에서 파생 해야하는 이유가 있습니까? Gamesocket은 소켓 상태 및 직렬화를 관리하는 반면 낮은 레벨 소켓 인터페이스는 소켓 클래스에 포함되어 있습니다. 서버 클래스는 소켓 클래스의 인스턴스를 생성 한 다음 Gamesocket 클래스에 포인터를 전달할 수 있습니다.
class GameSocket {
public:
GameSocket(Socket *s) : s_(s) {}
~GameSocket() {
s_->close();
delete s_;
}
...
private:
Socket *s_;
};
GameSocket* Server::Accept() {
// accept function added to Socket class
Socket *newSocket = serverSocket->accept();
// create GameSocket with newly opened Socket
return newSocket ? new GameSocket(newSocket) : NULL;
}
제휴하지 않습니다 StackOverflow