std::pair<struct, class> Fehler wenn es unique_ptr als class-member gibt

  • Moin ,
    ich hab hier einen Fehler aus dem ich nicht schlau werde, ich bin noch recht unerfahren was C++ betrifft.

    Code
    C2440  "<function-style-cast>":"initializer list" kann nicht in "std::pair<VEngineCore::Vector3, VEngineCore::Chunk>" konvertiert werden

    Die betreffende Codestelle mit der Fehlerbeschreibung:


    Dieser Fehler ist "neu", den hatte ich nicht bevor ich in der class Chunk einige raw pointer zu unique_ptr umgeschrieben habe.
    Wenn ich die (3) unique_ptr in Chunk auskommentiere kompiliert alles wunderbar.


    Weiß jemand woran das liegt, dass hier ein Fehler geworfen wird bzw. wie ich das beheben kann?


    Vielen Dank im Voraus


    @edit:
    achja das ist übrigens in einer Konsolenanwendung und ich benutze VS2015, also das ist nicht in einem Unreal Projekt direkt (soll aber später als DLL eingebunden werden)

  • Hab den Code jetzt ein bisschen abgeändert.
    Zum einen hab ich mich nebenbei noch ein bisschen zum Thema Pass by Reference/Value/Pointer belesen und bin zu dem Schluss gekommen, dass ich fast ausschließlich by Reference übergeben kann bzw. in den meisten meiner Fälle by Reference benutzen sollte (hat aber noch nichts mit der Lösung zu tun)


    Die neue Funktion sieht jetzt so aus:


    Der Error entsteht anscheinend dadurch, dass std::pairs initializer lists benutzt um die Elemente zu kopieren, allerdings unique_ptr keinen copy-operator bieten.
    Anscheinend kann man es trotzdem über einen .insert machen, muss dann allerdings value_types benutzen.
    Afaik ist emplace aber "mindestens genau so effizient wie ein insert", also benutze ich den stattdessen.

  • Okay also anscheinend funktioniert's nicht so wie gedacht..
    Hab jetzt alles komplett portiert und auch einige Bugs ausgemerzt, jetzt bin ich an dem Punkt wo ich merke, dass das nicht das ist was ich suche.
    Nachdem ich den chunk in die unordered_map move sind alle unique_ptr empty/null. -> Chunk hat 3 unique_ptr als Member.


    Weiß jemand wie ich den Chunk in eine unordered_map eintragen kann ohne, dass die unique_ptr "resettet" werden?
    Move setzt unique_ptr anscheinend zuverlässig == nullptr lt. Standard.
    Wäre ja auch schon ein Erfolg wenn ich die unique_ptr nachträglich (dauerhaft) initialisieren kann, nachdem der Chunk in die Map eingetragen wurde, aber auch das klappt anscheinend nicht.


    Hat jemand eine Idee? Finde zu dem konkreten Problem nüx..


    @edit:
    Also nach langem Googlen und rumprobieren bin ich jetzt zu einer neuen (hoffentlich) Lösung gelangt.
    Und zwar speichere ich die Chunks nicht mehr direkt in der map, sondern Pointer also unordered_map<key, Chunk*>
    Hab bis dato keine Seiteneffekte bemerkt, eventuell ändere ich Chunk* noch zu unique_ptr<Chunk>, mal schauen.