Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;结构和方法的映射错误可以';t将字符串转换为_树_迭代器<;标准::_Tree_val<;std::_Tree_simple_type<;等等_C++_Visual Studio_C++11_Struct_Constructor - Fatal编程技术网

C++ C++;结构和方法的映射错误可以';t将字符串转换为_树_迭代器<;标准::_Tree_val<;std::_Tree_simple_type<;等等

C++ C++;结构和方法的映射错误可以';t将字符串转换为_树_迭代器<;标准::_Tree_val<;std::_Tree_simple_type<;等等,c++,visual-studio,c++11,struct,constructor,C++,Visual Studio,C++11,Struct,Constructor,底线是,我正在为一个结构编写一个方法,它添加到作为结构一部分的映射中 在头文件中,对于结构,map变量被声明为map(string,Node)(Node是另一个结构)(它在代码中使用“>”,只是在这个文本编辑器中,它们之间的东西不会显示。) 有一种用于网络的方法,它接受一个ifstream,并使用getline等获取每行中的数据并创建一个节点,该节点被添加到网络变量的映射中 在头文件中,此映射称为“节点”。所以在方法的代码中,我有nodes.insert(字符串变量,node变量)。我在树的问题

底线是,我正在为一个结构编写一个方法,它添加到作为结构一部分的映射中

在头文件中,对于结构,map变量被声明为map(string,Node)(Node是另一个结构)(它在代码中使用“>”,只是在这个文本编辑器中,它们之间的东西不会显示。)

有一种用于网络的方法,它接受一个ifstream,并使用getline等获取每行中的数据并创建一个节点,该节点被添加到网络变量的映射中

在头文件中,此映射称为“节点”。所以在方法的代码中,我有nodes.insert(字符串变量,node变量)。我在树的问题上犯了一个错误

 error C2664: 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>> std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>>::insert(std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>>,const std::pair<const _Kty,_Ty> &)': cannot convert argument 1 from 'std::string' to 'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>>' 
所以,我尝试添加到一个映射(字符串,节点),当我尝试使用字符串-节点对时,它说它不能从字符串转换为具有_-Tree s的内容

我在Visual Studio 2015


如果需要,我可以包含更多的代码,我只是不想让它变得比需要的更混乱。

查看文档以了解更多信息。所有带有两个参数的重载都将迭代器作为第一个参数,而不是
字符串
。这就是您的编译器所抱怨的,因为它试图将
字符串
转换为迭代器,但失败了

你的意思似乎是

nodes.insert(std::make_pair(temp.label, temp));

正如错误消息所述,的参数类型和参数之间存在不匹配

看起来您想直接在映射中构造一个
节点
,但是
std::map::insert()
不支持这样做

相反,您可以使用:

nodes.emplace(temp.label, temp);

这是怎么回事
emplace()
是一个可变模板,它可以将其参数完美地转发给
std::map::value\u type
的构造函数,该构造函数将是
std::pair

,这肯定是正确的。忘记我需要插入一对,而不是单独插入一对的内容。谢谢大家!@梅根约翰逊如果这是一个正确的答案,你应该接受它,这样作者就可以获得荣誉…哇,太棒了。我以前使用过insert,但这次忘记了插入一对元素,而不是单独的元素,但我不知道emplace(),它可以完美地工作。非常感谢。
nodes.insert(std::make_pair(temp.label, temp));
nodes.emplace(temp.label, temp);