Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: [C++]Typeid

  1. #1

    [C++]Typeid

    Sviluppando la mia lib, sono incappato in un problema:
    codice:
    /**
    * Virtuale: no 
    * Funzione: Parserizza le informazioni
    * Argomenti: constante a Object
    * Return: -
    * Eccezioni: -
    */
    void Object::ParseInfo(const Object *obj)
    {
             if(typeid(obj) ==  "Conf")
             {
                      Conf* sel = dynamic_cast< Conf* >(obj);
                      if(sel){
                      sel->Info();
                      }
             }
             if(typeid(obj) ==  "Time")
             {
                      Time* sel = dynamic_cast< Time* >(obj);
                      sel->Info();
                      if(sel){
                      sel->Info();
                      }
             }
             if(typeid(obj) ==  "App")
             {
                      App* sel = dynamic_cast< App* >(obj);
                      sel->Info();
                      if(sel){
                      sel->Info();
                      }
             }
        }    
        
    }
    Non va......................mi sai aiutare?
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  2. #2
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    ma conf time e app sono classi da te definite?

  3. #3
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    cmq devi includere <typeinfo>

    i confronti:
    if(typeid(obj)==typeid(Conf))........

  4. #4
    Originariamente inviato da Zalex
    ma conf time e app sono classi da te definite?
    le classi son cosi:
    codice:
    Object
       |
       +--Conf
             |
             +--App
    cmq cosi:
    codice:
    /**
    * Virtuale: no 
    * Funzione: Parserizza le informazioni
    * Argomenti: constante a Object
    * Return: -
    * Eccezioni: -
    */
    void Object::ParseInfo(const Object *obj)
    {
             if(typeid(obj) ==  typeid( Conf* ))
             {
                      Conf* sel = dynamic_cast< Conf* >(obj);
                      if(sel)
                      {
                      sel->Info();
                      }
             }
             if(typeid(obj) ==  typeid( Time* ))
             {
                      Time* sel2 = dynamic_cast< Time* >(obj);
                      sel2->Info();
                      if(sel2)
                      {
                      sel2->Info();
                      }
             }
             if(typeid(obj) ==  typeid( App* ))
             {
                      App* sel3 = dynamic_cast< App* >(obj);
                      sel3->Info();
                      if(sel3)
                      {
                      sel3->Info();
                      }
             }
    }
    e con l'header incluso nn va perche mi da:
    Lib/object.cpp: In member function `void LucLib::Object::ParseInfo(const
    LucLib::Object*)':
    Lib/object.cpp:38: `Conf' undeclared (first use this function)
    Lib/object.cpp:38: (Each undeclared identifier is reported only once for each
    function it appears in.)
    Lib/object.cpp:38: parse error before `)' token

    Lib/object.cpp:41: `sel' undeclared (first use this function)
    Lib/object.cpp: At global scope:
    Lib/object.cpp:46: parse error before `if'
    Lib/object.cpp:49: syntax error before `->' token

    Lib/object.cpp:58: syntax error before `->' token
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  5. #5
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    mi invieresti il codice cosi' faccio qualche prova?

  6. #6
    Originariamente inviato da Zalex
    mi invieresti il codice cosi' faccio qualche prova?
    mi dai la tua mail?
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  7. #7
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    Originariamente inviato da Luc@s
    mi dai la tua mail?
    ti ho mandato un msg

  8. #8
    Se il tipo è polimorfo ti consiglio di usare dynamic_cast. Più veloce, più potente, più efficiente.

    Bye
    There are 10 kinds of people in the world: who knows the binary numeration and who not

  9. #9
    Originariamente inviato da TheGreatWorld
    Se il tipo è polimorfo ti consiglio di usare dynamic_cast. Più veloce, più potente, più efficiente.

    Bye
    e io che uso secondo te?
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  10. #10
    Cmq o fai una cosa o ne fai un`altra. E` inutile fare sia un controllo basato su typeid e allo stesso tempo verificare che dynamic_cast non ritorni 0. Poi non ho ben capito cosa vuoi fare: vuoi che un oggetto specifico effettui ANCHE (visti gli if a cascata) il metodo 'Info' di tutte le sue classi base? Ad ogni modo quel codice non e` per nulla estendibile, perche` se e` come ho inteso io, ogni volta che aggiungi una nuova classe alla gerarchia devi ricompilare la classe base. Insomma un macello!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.