Über eine abstrakte Liste iterieren



  • Hallo ,
    ich möchte über eine abstrakte Liste iterieren.

    d.h. ich habe eine Klasse < MServiceKonkret > diese ist abgeleitet von der Basisklasse < MService >.

    Die Objekte der Klasse < MServiceKonkret> werden in der Liste
    < m_pobServiceKonkret > gespeichert.

    std::list<MServiceKonkret*>   m_pobServiceKonkret ;
    

    Jetzt möchte ich in der Liste <pobServiceKonkret > nach eiinem bestimmten Eintrag suchen.
    Ich möchte das aber abstrakter suchen . Deswegen benutze ich folgende Methode:

    //Aufuf
    MSender* poSender = ( MServiceKonkret* )GibService
                                 ( p_sKanalname , m_pobServiceKonkret );
    
    //Methode
    
    MService* MKlasse::GibService( CString p_sKanalname ,
                                          std::list<MService*> pobService )
    {
      MService*  poService = NULL;
      std::list<MService*>::iterator   oIter;
      for( oIter = pobService.begin(); oIter != pobService.end(); ++oIter ) {
        if( 1 == (*oIter)->GibKanalname().Compare( &p_sKanalname ) ) {
    	poService = (*oIter);
    	return poService;
        }
      }
      return NULL;
    }
    

    Und bekomme folgende Fehlermeldung:

    m:\MKlasse.cpp(130): error C2664: 'MServicebusAdapter::GibService': Konvertierung des Parameters 2 von 'std::list<_Ty>' in 'std::list<_Ty>' nicht möglich
    with
    [
    _Ty=MServiceKonkret*
    ]
    and
    [
    _Ty=MService *
    ]

    Kann mir jemand helfen ?

    Gruß ,
    Elke



  • Hast Du den Header von MServiceKonkret in der Datei in der Du den Aufruf machst inkludiert?



  • Hast du den Header von MS..Konkret in der Datei in der Du den Aufruf machst inludiert?



  • Ja,
    das habe ich gemacht.



  • std::list<MServiceKonkret*> m_pobServiceKonkret muss
    std::list<MService*> m_pobServiceKonkret
    lauten.



  • Hallo templäd,

    das war es. Danke dir.

    Jetzt funktioniert es.

    Gruß Elke.



  • nein , in diesem Fall muss

    std::list<MServiceKonkret*> m_pobServiceKonkret

    sein. Sonst weiß ich ja nicht welche Elemente in der Liste sind.

    Aber dann bekomme ich den Fehler:
    error C2664: Konvertierung des Parameters 2 von 'std::list<_Ty>' in 'std::list<_Ty>' nicht möglich
    with
    [
    _Ty=MServiceKonkret*
    ]
    and
    [
    _Ty=MService *
    ]

    Was mache ich falsch ?

    Gruß ,
    Elke



  • Elke schrieb:

    nein , in diesem Fall muss

    std::list<MServiceKonkret*> m_pobServiceKonkret

    sein. Sonst weiß ich ja nicht welche Elemente in der Liste sind.

    Nein, muß es nicht - die Elemente wissen selber (dank vtable), von welcher Klasse sie sind.



  • Das habe ich gerade auch rausgefunden. Ich speichere doch in der Liste konkrete
    Objekte . Deswegen wissen sie , von welcher Klasse sie sind.

    Stimmt.

    War ein Fehler von mir.

    danke.

    Gruß ,
    Elke.


Anmelden zum Antworten