die Sache mit den const und so

Von: , Frage gestellt am Di, 5. Jun 2001

Hallo C++'ler,

ich habe ein verzwicktes Problem, welches vermutlich auf einem Verständnissproblem oder unwissenheit berut.
Ich habe eine Klasse entworfen, welche ich gleich in Auszügen zeigen werden. Irgendwas klappt mit dem const nicht so wie ich es mir vorstelle. Kann mir jemand sagen, was an dem Code nicht ok ist?
Irgendwas hab ich mit const nicht verstanden.

Gruß Karsten


class CXMLVector : public vector<CXMLMap>
{
private:
...
public:
...
/**
* Return the the next elment. It encases the iterator.
* End of Vector can be detect by member isEnd() or
* use the standard Iterator member
*/
CXMLMap getNextElement()
{
if(Iterator != end())
{ return *Iterator;}
else throw CXMLError(10);
}
...
};

class CXMLController {
public:

void startConversion(const string & strFormat)
{
...
// ----------- HIER IST DER FEHLER --------------//
// Meldung:
getNextElement' : this-Zeiger kann nicht von
'const class CXMLVector' in
'class CXMLVector &' konvertiert werden
Durch die Konvertierung gehen Qualifizierer verloren

const CXMLMap mymap = (*lnkIXMLVector).getNextElement();
...
}

...

private:
const CXMLVector* lnkIXMLVector;
};

5 Antworten zu dieser Frage

  1. Antwort von nach 5 Stunden 0 hilfreich
    Re: die Sache mit den const und so

    Hi Karsten :)

    Wenn du ein bisschen mehr Code für mich hättest, kann ich dir vermutlich helfen. Und schließ deinen Code bitte in ein "pre"-Tag ein, damit die Einrückung nicht kaputt geht ...

    Viele Grüße

    Stefan.

    • Antwort von nach 5 Tagen 0 hilfreich
      Re^2: die Sache mit den const und so

      Hi dr. stefan.
      ich war lange 'tot'.
      jetzt bin ich wieder ein bisschen lebend.
      das ding mit koeln damals ging als drama aus.
      mom bin ich in saarbruecken.
      es wird sicher mal klappen, was wir uns vorgenommen hatten.

      gruss -digi

    • Antwort von nach 36 Tagen 0 hilfreich
      Re^2: die Sache mit den const und so

      Hi Stefan,


      Hi Karsten :)

      Wenn du ein bisschen mehr Code für mich hättest, kann ich dir
      vermutlich helfen. Und schließ deinen Code bitte in ein
      "pre"-Tag ein, damit die Einrückung nicht kaputt geht ...
      hier mehr Code,

      Gruß Karsten

      class CMT100Converter : public CCN_XML::IFormatConverter {
      private:
      // parameter: a correlationMap 
      // an Payments Map
      // an record 
      // 
      void fillCRecord(const vector< pair<string, string> >& correlationMap, const CCN_XML::CXMLMap& PaymentdataMap, CRecord& record) ;
      <<..>>
      public:
      const char* const 
      convertXMLPayments(const CXMLVector& vXMLPayments) ;
      };
      // -------------------------------------------
      const char* const 
      CMT100Converter::convertXMLPayments(const CXMLVector&vXMLPayments)
      {
      <<..>>
      // fill an record with mt100 data
      fillCRecord(correlationMap, vXMLPayments.getNextElement(), record);
      <<..>>
      }
      // -------------------------------------------
      class CXMLVector : public vector<CXMLMap>
      {
      <<...>>
      public:
      /**
      * Return the the next elment. It encases the iterator.
      * End of Vector can be detect by member isEnd() or
      * use the standard Iterator member
      */
      CXMLMap getNextElement();
      <<...>>
      }
      

  2. Antwort von nach 22 Stunden 0 hilfreich
    Re: die Sache mit den const und so

    hallo,
    ich glaube wenn du variable mit const defenierst darfst du diese nicht mehr ändern und das war vielleicht das fehler

  3. Antwort von nach einem Tag 0 hilfreich
    Re: die Sache mit den const und so

    Mit ein wenig mehr Code waere es in der Tat etwas einfacher gewesen, aber ich vermute folgendes:
    lnkIXMLVector ist bei dir ein Zeiger auf ein konstantes Object, richtig?
    Wenn dem so ist, bedeutet dies, das man fuer das object auch nur konstatne Elementfunktionen aufrufen kann
    also entweder du machst die Elementfunktion konstant (heisst sie darf keine Daten der Klasse veraendern) indem du nach der Argumentenliste ein const einfuegst

    CXMLMap getNextElement() const
    {
    if(Iterator != end())
    { return *Iterator;}
    else throw CXMLError(10);
    }
    

    oder aber du deklarierst den Zeiger so das er auf ein nicht konstantes object zeigt.

    Wenn es das nicht war, poste noch einmal etwas mehr Code.

    Gruss Ben

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!