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 Code

    Ja, 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.


Anmelden zum Antworten