std::initializer_list<std::pair<std::string, ...>> initalisierung problem
-
Guten Morgen ich habe folgende Klasse:
class Value { public: Value(const bool& v); Value(const int& v); Value(const double& v); Value(const std::string& v); Value(std::initializer_list<std::pair<std::string, Value>> content); Value(std::initializer_list<Value> content); };
und möchte so dynamische object anlegen wiwe folgd:
Value t(3); //ok Value t2({1,2,3}); //ok Value t3({ std::make_pair("e",2) }); //ok Value t4({ {"e",2 } }); // not ok
ab die initialisierung von pairs muss ich explitzu mit make_pair machen, und nicht wie bei "t4" inline.. was macht ich falsch!?
Danke und schönes WE schonmal;:)
-
Was heißt "not ok"? Gibt es eine konkrete Fehlermeldung oder passiert zur Laufzeit etwas Unerwartetes?
Und welchen konkreten Compiler benutzt du und welche C++ Version?Lies auch mal die Antwort von "Captain Hatteras" in Brace-initialized vector constructor argument raises ambiguity error in gcc, but not in clang, and depends on size of vector.
-
@SoIntMan sagte in std::initializer_list<std::pair<std::string, ...>> initalisierung problem:
und möchte so dynamische object anlegen wiwe folgd:
ab die initialisierung von pairs muss ich explitzu mit make_pair machen, und nicht wie bei "t4" inline.. was macht ich falsch!?Hallo,
ist es vielleicht besser für dich, wenn wir in englisch weiter machen? Das ist jedenfalls komplett unverständlich!
Welcher Konstruktor sollte denn deiner Meinung nach bei t4 aufgerufen werden?
-
@Th69 sagte in std::initializer_list<std::pair<std::string, ...>> initalisierung problem:
Was heißt "not ok"? Gibt es eine konkrete Fehlermeldung oder passiert zur Laufzeit etwas Unerwartetes?
Und welchen konkreten Compiler benutzt du und welche C++ Version?verwende VS2022 MSVC die fehler meldung
Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand Fehler (aktiv) E0309 Mehrere Instanzen des Konstruktors ""Middleware::Value::Value"" stimmen mit der Argumentliste überein: Recorder ......Controller.h
es kann noch kompiliert werden...
@Jockelx sagte in std::initializer_list<std::pair<std::string, ...>> initalisierung problem:
Welcher Konstruktor sollte denn deiner Meinung nach bei t4 aufgerufen werden?
sorry für das Unverständliche;) Ja das ist ein Gute Ansatz:) Hat er da den ne Alternative für die C-tor wahl?
EDIT: AHH ok er kann zwischen "std::pairstd::string,Middleware::Value" und "std::initializer_list<Value>" bei der erste Value string ist und der zweit "X".. oder? wie könnte ich das lösen?
-
@SoIntMan sagte in std::initializer_list<std::pair<std::string, ...>> initalisierung problem:
wie könnte ich das lösen?
Ich vermute, du möchtest das
Value(const std::pair<std::string, Value>& content); // diesen hier, //Value(std::initializer_list<std::pair<std::string, Value>> content); // statt diesem Value x({ "e", 2 }); // ok Value tx({{ "e", 2 }}); // ok Value t4({{ "e", 2 }, {"f", 3}}); // ok
haben
-
@Jockelx perfekt;) Das macht Sinn:)