boost::sub_range, boost::ptr_vector und boost::foreach



  • Moin moin,

    ich nutze in meinem Code sub_range zumannen mit einem ptr_vector
    und zusammen mit foreach. Ein Beispiel.

    Ich kann mir das ehrlich gesagt nicht erklären. Warum gehen die
    anderen beiden Fälle?

    Gruß, Panke



  • Ich bin zu faul das jetzt zu compilieren.

    Was bedeutet "geht nicht"?
    Und wenn du so wenig Code hast, dann brauchste keinen pastebin.



  • Ups, sorry. Die Fehlermeldung lautet:

    /home/tobias/Projects/mobev/svn/trunk/prototype/test.cpp:24: error: invalid initialization of reference of type ‘A&’ from expression of type ‘const A’

    In der Zeile vom ersten foreach. Ich nutze den pastebin, weil man von da
    den Quelltext direkt als datei runterladen kann, weil man ihn direkt verändern
    und neu hochladen kann etc.

    Das ist einfach viel bequemer als 90% der Foren.



  • Hi,

    elements gibt die Range als Kopie zurück. Diese Kopie ist ein ein r-value und kein l-value. Normale Referenzen sind aber l-value Referenzen. Eine r-value Referenz würde man mit && statt & schreiben. Aber das trifft hier einfach nicht den Sinn, du brauchst wahrscheinlich einfach keine Kopie.

    Jedenfalls lässt sich das Problem leicht lösen:
    a) A statt A& in Schleife nutzen
    b) A& in element() zurückliefern
    c) const A& statt A& nutzen

    Variante c) macht wohl am meisten Sinn, da Du einfach auf keiner Kopie etwas ändern möchtest.



  • Danke! Das hat geholfen.


Anmelden zum Antworten