Ich habe ein Programm, das mir einen vageen Fehler, so anstatt schreiben Hunderte von Zeilen von Code, den ich gemacht habe diese vereinfachte Version ist zu geben:C++ - unique_ptr innerhalb eines unordered_map führt zu Fehlern
#include <unordered_map>
#include <memory>
#include <utility>
struct s
{
int height;
std::unordered_map<std::string, std::unique_ptr<s>> children;
};
void InitWD(s &wd_ptr, int height, std::unordered_map<std::string, std::unique_ptr<s>> children) //Initialize a WindowData
{
wd_ptr.children=children;
wd_ptr.height=height;
}
int main()
{
s test;
test.height=1;
test.children=std::unordered_map<std::string, std::unique_ptr<s>>();
std::unique_ptr<s> ptr(new s);
InitWD(*ptr, 2, std::unordered_map<std::string, std::unique_ptr<s>>());
test.children.emplace("two", std::move(ptr));
}
Der Fehler (GCC 4.8 mit C++ 11) in Bezug auf entweder die unique_ptr
oder die unordered_map
, glaube ich:
error: use of deleted function 'constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::basic_string<char>; _T2 = std::unique_ptr<s>]'
Vielleicht irgendwo im Code ein unique_ptr
kopiert wird? Das ist das einzige, was mir einfällt, dass das einen solchen Fehler verursachen würde.
Jede Hilfe wird geschätzt!
Das ist wirklich interessant; g ++ zeigt normalerweise an, welche Codezeile, aber [für dieses Beispiel eindeutig] (http://coliru.stacked-crooked.com/a/80e9b5ae43362e32) auch für g ++ v6.3 (http: //coliru.stacked -crooked.com/a/c19194654682c731). Sollte dies als Fehler in gcc abgelegt werden? – Justin
@Justin Ich denke schon. Sie können einen Fehler ablegen, wenn Sie wollen, obwohl ich wahrscheinlich nicht stören würde, da ich denke, es wird wahrscheinlich ein Duplikat eines bestehenden Fehlers sein, und ich bin zu faul, um zu überprüfen. – Brian