我有一个程序给了我一个模糊的错误,所以我没有发布数百行代码来制作这个简化版本:
#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));
}
错误(GCC 4.8 with C ++ 11)与unique_ptr
或unordered_map
有关,我相信:
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>]'
也许代码中某处unique_ptr
被复制了?这是我能想到的唯一会导致这种错误的事情。
感谢任何帮助!
答案 0 :(得分:4)
错误在于:
wd_ptr.children=children;
这会尝试将 children
复制到wd_ptr.children
。您需要将其更改为:
wd_ptr.children = std::move(children);
非常不幸的是,gcc和clang都无法生成实际告诉您代码哪一行出错的诊断。