mam w programie takie klasy:
// ObjectType i RequestType to typy enum, nie maja tu wiekszego znaczenia wiec nie przedstawiam naglowkow
class Header
{
protected:
ObjectType id; // typ obiektu ktory potem bede odbieral za pomoca wskaznika typu Header ( jest po to by go rozpoznac )
public:
ObjectType GetId ( );
virtual std::string Serialize () const = 0;
};
// i
class Request:public Header
{
RequestType m_type;
std::string m_args;
public:
Request ( );
Request ( std::string buffer );
std::string Serialize ( ) const;
// i dalsze metody get i set
};
i jeszcze fragment kodu gdzie ich urzywam:
Header * object; // tworze wskaznik klasy Header (chce nim odebrac obiekt jakies klasy dziedziczacej po Header, jeszcze nie wiem ktorej)
object = m_mediator->Recieve ( ); // odbieram ten obiekt, tutaj wszystko jest ok (sprawdzalem debuggerem VS 8/10/12
while ( object != false ) // obiekt jest w porzadku, jego Header::id jest rowne request (enum)
{
if ( object->GetId() == message ) // i tu wlasnie nagle id sie zmienia na jakas duza ujemna wartosc, jak tylko //wejdziemy do funkcji GetId, co ciekawe jak zrobimy id publiczne i odniesiemy sie bezposrednio do niego (bez funkcji) to zwroci //wartosc normalnie, bez bledow, nie zmieniona
{
Message * msg = (Message*)object;
ClientsMsg ( msg );
}else if ( object->GetId() == request )
{
Request * rqst = (Request*)object;
switch ( rqst->GetType ( ) )
{
case nickToConfirm:
ConfirmNick ( rqst );
break;
// dalsza czesc kodu
Dodam jeszcze, ze kazda inna funkcja wywolana na tym obiekcie powoduje taki sam reset wartosci, nie tylko Header::id
Ktos ma jakis pomysl czemu tak sie dzieje? Zle rzutowanie? Zle zaimplementowane naglowki? Czekam na odpowiedzi..