c++ 질문입니다.
글쓴이: balgarac1 / 작성시간: 목, 2015/11/26 - 2:03오후
class CPacketHeader { public: UB2 msg_type; CPacketHeader(UB2 msgType); virtual ~CPacketHeader(); virtual void CShowPacket() = 0; }; class CLoginAuthReqPacket : public CPacketHeader { public: CLoginAuthReqPacket(UB2 msgType, SCHAR * dbUser, SCHAR * pw, SCHAR * dbName, SCHAR * pName); ~CLoginAuthReqPacket(); void CShowPacket(); private: SCHAR db_user[33]; SCHAR password[33]; SCHAR program_name[33]; SCHAR db_name[33]; }; class CLoginAuthResPacket : public CPacketHeader { public: CLoginAuthResPacket(UB2 msgType, UB2 rtnLen, SCHAR * rtnMsg); ~CLoginAuthResPacket(); void CShowPacket(); private: UB2 rtn_len; SCHAR rtn_msg[257]; };
상속 구조를 갖고 있습니다.
CPacketHeader::CPacketHeader(UB2 msgType) { msg_type = msgType; } // 로그인 요청 생성자 CLoginAuthReqPacket::CLoginAuthReqPacket(UB2 msgType, SCHAR * dbUser, SCHAR * pw, SCHAR * dbName, SCHAR * pName) : CPacketHeader(msgType) { strcpy((char *)db_user, (char *)dbUser); strcpy((char *)password, (char *)pw); strcpy((char *)db_name, (char *)dbName); strcpy((char *)program_name, (char *)pName); } // 로그인 응답 생성자 CLoginAuthResPacket::CLoginAuthResPacket(UB2 msgType, UB2 rtnLen, SCHAR * rtnMsg) : CPacketHeader(msgType) { rtn_len = rtnLen; strcpy((char *)rtn_msg, (char *)rtnMsg); } void CLoginAuthReqPacket::CShowPacket() { cout << "[LOGIN AUTH REQ PACKET]" << endl; cout << "[MSG TYPE] : " << msg_type << endl; cout << "[DB USER] : " << db_user << endl; cout << "[PASSWORD] : " << password << endl; cout << "[PROGRAM NAME] : " << program_name << endl; cout << "[DB NAME] : " << db_name << endl; } void CLoginAuthResPacket::CShowPacket() { cout << "[LOGIN AUTH RES PACKET]" << endl; cout << "[MSG TYPE] : " << endl; cout << "[LOGIN RES MSG]" << endl; cout << rtn_msg << endl; };
이렇게 짰는데 각 생성자마다 빨간줄 그어지면서 선언한 가상함수를 구현하지 않았다고 그러는데..
전 구현헀는데 왜 에러가 발생하는건가요??
Forums:
상속받은 함수를 오버라이딩을 할때 명시적으로
상속받은 함수를 오버라이딩을 할때 명시적으로 virtual 혹은 최신 C++11에서는 override 예약어를 사용하세요
(override 예약어를 사용했을 시, 코딩상 실수로 함수 시그네춰를 안맞출 경우 컴파일 에러를 띄워줍니다.)
그리고 제 컴파일러로는 에러는 뱉지 않는군요(linux, g++).
(컴파일은 g++ -c -Wall -Wextra a.cpp 로 했네요. 경고 하나도 안떳습니다.)
혹시 VS 쓰시나요? 예전에 VS 쓸 때 빌드 잔버그 많던데
빌드 정리 하고 나서 빌드 새로 해보셨나요?
PS. typedef 등만 추가하고 컴파일 했습니다. 똑같지만..올려봅니다.
헤더
구현
그리고 개인적으로 네트워크 패킷 설계할 때 저는
그리고 개인적으로 네트워크 패킷 설계할 때 저는 이렇게 설계했습니다.
그리고 직렬화 하는 별도의 함수 구현 하구요.
당연히 구조체 그대로 통째로 보내지 않습니다.
(byte order, memory alignement, 동적할당 데이터들...당연한거죠 ^^)
답변 감사드립니다..ㅜㅜ
감사합니다. 답변 주신 것 깊이 생각해서 적용하겠습니다.
...
에러가 났다고 질문을 할 때에는 에러메시지를 보여주는 편이 대답을 얻을 확률이 높습니다.
댓글 달기