Die Sache mit den const und so

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
{
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;
};

Hi Karsten :smile:

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.

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

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

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

Hi Stefan,

Hi Karsten :smile:

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 \>& 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
{
\>
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();

\>
}