boost::array
-
{ using std::sort; typedef array<CObject*, 100>::iterator iterator; iterator start = Player::humanPlayerTeam->shadowObjects.begin(); iterator end = Player::humanPlayerTeam->shadowObjects.end(); sort(start, end, sortRule); }
Wieso compiliert das nicht? boost::array::begin() ist doch so überladen, dass es auch einen nicht-const iterator zurückgibt.
error C2440: 'initializing' : cannot convert from 'boost::array<T,N>::const_iterator' to 'iterator'
with
[
T=CObject *,
N=100
]
Conversion loses qualifiers
-
Wenns nicht anders geht: const_cast
MfG SideWinder
-
Jo, so schaut's im Moment auch aus. Ich wunder mich nur, weil das normal nicht nötig sein dürfte, oder sehe ich das falsch?
-
vielleicht ist das Array ja zufällig const, weil du in einem const Member oder so drauf zugreifst, dann bleibt dem Compiler ja nichts anderes übrig, als die const_iterator Version von begin zu nehmen.
CObject? *schaudder*
-
Nein das array ist nicht const.
Das 'CObject' bitte nicht missverstehen.
Das ist kein Präfix, sondern es hat eine Basisklasse Object und CObject steht für 'CollisionObject', das will ich aber nicht jedesmal ausschreiben.
-
Optimizer schrieb:
Das ist kein Präfix, sondern es hat eine Basisklasse Object und CObject steht für 'CollisionObject', das will ich aber nicht jedesmal ausschreiben.
Der erste Oscar des diejährigen IOC++CC geht an... *spannende Musik* Optimizer - für sein Lebenwerk "Wie man Programmierer durch Abkürzungen auf falsche Fährten lockt"
PS:
boost::array hat auch non const iteratoren, der Fehler liegt also an deinem Code
-
Der erste Oscar des diejährigen IOC++CC geht an... *spannende Musik* Optimizer - für sein Lebenwerk "Wie man Programmierer durch Abkürzungen auf falsche Fährten lockt"
Danke, ich fühle mich geehrt. *g*
Faulheit ist eine Tugend.PS:
boost::array hat auch non const iteratoren, der Fehler liegt also an deinem CodeJa, ich weiss, dass es non-const iteratoren hat. Aber ich weiss nicht, warum der nicht hergenommen wird.
-
Optimizer schrieb:
Ja, ich weiss, dass es non-const iteratoren hat. Aber ich weiss nicht, warum der nicht hergenommen wird.
Dann mach mal ein minimal Beispiel.
-
BTW: Ich kann folgendes hier ohne Probleme übersetzen:
class CObject { }; ... boost::array<CObject*, 100> Player; typedef boost::array<CObject*, 100>::iterator iterator; iterator start = Player.begin(); iterator end = Player.end(); sort(start, end);
Sicher, dass humanPlayerTeam und/oder shadowObjects nicht konstant sind?
MfG SideWinder
-
Damn.... es war alles nicht-const, das array, das Team-Object, die Player, nur der Pointer humanPlayerTeam hat es als const referenziert.
Danke, meine Blödheit.