ok const ist klar.. aber trodem fehler?? versteh nich??
-
habe funktion mit const deklariert welche ein const CTime List Zeiger zzrück gibt:
const CTimeList *pList = getModul(iModul);pList ist ein CTypedPtrArray!!!
wenn ich jetzt folgendes mache:
long l= pList->paCTimeElems.ElementAt(i)->lEnd;entnehm ich ja nur nen wert (änder ihn NICHT) eines elements aus dem array wo pList hinzeugt aber es kommt compiler fehler:
error C2662: 'CTypedPtrArray<BASE_CLASS,TYPE>::ElementAt': this-Zeiger kann nicht von 'const CTypedPtrArray<BASE_CLASS,TYPE>' in 'CTypedPtrArray<BASE_CLASS,TYPE> &' konvertiert werden
with
[
BASE_CLASS=CPtrArray,
TYPE=CTimeElem *
]
and
[
BASE_CLASS=CPtrArray,
TYPE=CTimeElem *
]
and
[
BASE_CLASS=CPtrArray,
TYPE=CTimeElem *
]
Durch die Konvertierung gehen Qualifizierer verloren
-
constist offensichtlich nicht klar. (Und dassCTypedPtrArraykeine allgemein bekannte Klasse ist scheinbar auch nicht...)
-
Kann es sein dass die ElementAt-Methode selbst nicht const ist? Dann ist es dem Compiler nämlich ziemlich egal, ob Du den entnommenen Wert nicht änderst

-
ne die ist nicht const... aber das ja ne methode von CTypedPtrArray ..
lösungsvorschläge?
-
- Den Hersteller verklagen
- getModul() keinen const Pointer zurückgeben lassen
-
hmm ok... ohne "const" gehts auch...

-
weitere Möglichkeit: Du holst dir das Element per GetAt() (die Methode ist const)
(PS: Ich gehe mal davon aus, daß du von der MFC-Klasse CTypedPtrArray sprichst)
-
jepp davon sprech ich... GetAt() gibt ja eine kopie, und ElementAt() eine referenc zurück nehm ich an
-
Richtig erkannt - auf die Weise wird sichergestellt, daß du nicht versehentlich ein Element eines konstanten Arrays änderst.
Eigentlich hätte man das auch als 'const T& GetAt(int) const' definieren können, aber aus irgendeinem Grund hat MS das nicht gemacht - std::vector liefert für konstante Vektoren eine konstante Referenz zurück.