[bcb4] dynamic_cast geeft NULL terug

Pagina: 1
Acties:

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Ik heb de volgende class:
.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class TClient : public TWSocketClient
{
public:
    // Socket variables
    char*      Buffer;
    AnsiString Command;
    bool       LoggedOn;
    TTimer     *Timer;
    int        BufferSize;
    int        Count;

    // CTI variables
    AnsiString Extension;

    __fastcall ~TClient();
    int  __fastcall SendStr(AnsiString Text);
    void __fastcall TimerExec(TObject *Sender);
    void __fastcall ResetTimer();
    void __fastcall Interpret();
};


Op het moment dat een client naar mijn server verbind op een bepaalde port word de volgende code aan geroepen:

C++:
1
2
3
4
5
6
7
8
9
void __fastcall TfrmMain::wsMainClientConnect(TObject *Sender,
      TWSocketClient *Client, WORD Error)
{
    TClient *cln = dynamic_cast<TClient *>(Client);

    if (!cln)
        throw Exception("Ja kut");

// ...


Probleem is dat die dynamic_cast altijd NULL teruggeeft (krijg dus die exceptie voor m'n snufferd), terwijl Client wel gewoon goed is. Gebruik ik dynamic_cast verkeerd? Kan ik niet van TWSocketClient naar TClient casten maar alleen andersom? Help!

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Dit zou gewoon moeten kunnen lijkt me. Is Client niet al null als ie binnenkomt?
Edit: En oh ja, Client moet natuurlijk ook wel echt een klasse bevatten van het type TClient. Anders zal het idd niet werken...

[ Voor 45% gewijzigd door SWfreak op 29-01-2003 16:09 ]


  • [ti]
  • Registratie: Februari 2000
  • Niet online
De variable Client zoals ie wsMainClientConnect() binnenkomt is niet NULL. Deze Client variable is dus van het type TWSocketClient en moet omgezet worden naar TClient. TClient is afgeleid van TWSocketClient dus lijkt me dat ie gewoon omgezet moet kunnen worden met dynamic_cast?

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Nee, dat kan niet helaas. Check maar in de manual. Dit zou namelijk rare dingen kunnen geven...

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Nja, 't kon wel via 'n omweg. Heb het inmiddels met wat hulp opkunnen lossen. Probleem lag niet aan de dynamic_cast maar aan een user error (ik was iets van de code vergeten om te zetten :P )