Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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++ 构造一对(字符串,*节点)以插入无序的_映射 typedef无序映射关系映射; 使用关系\项=关系映射::值\类型; void insertNode(字符串类别,relationNode*节点){ 关系\u条目插入对= 制作_对(类别、节点); }_C++ - Fatal编程技术网

C++ 构造一对(字符串,*节点)以插入无序的_映射 typedef无序映射关系映射; 使用关系\项=关系映射::值\类型; void insertNode(字符串类别,relationNode*节点){ 关系\u条目插入对= 制作_对(类别、节点); }

C++ 构造一对(字符串,*节点)以插入无序的_映射 typedef无序映射关系映射; 使用关系\项=关系映射::值\类型; void insertNode(字符串类别,relationNode*节点){ 关系\u条目插入对= 制作_对(类别、节点); },c++,C++,导致错误“无法将“category”(类型“std::string(aka std::basic_string(char)))转换为类型“std::basic_string(char)&&” 以及错误“无法将“节点”(类型“relationNode*”)转换为类型“relationNode*&&” 我打算制作一对,然后把它插入一张无序的地图 我正在使用“g++-g-O0-Wall-Wextra-std=gnu++11”来编译代码。任何帮助都将不胜感激。只要写下: typedef unordere

导致错误“无法将“category”(类型“std::string(aka std::basic_string(char)))转换为类型“std::basic_string(char)&&” 以及错误“无法将“节点”(类型“relationNode*”)转换为类型“relationNode*&&”

我打算制作一对,然后把它插入一张无序的地图

我正在使用“g++-g-O0-Wall-Wextra-std=gnu++11”来编译代码。任何帮助都将不胜感激。

只要写下:

typedef unordered_map<string, relationNode*> relationMap;
using relation_entry = relationMap::value_type;

void insertNode(string category, relationNode* node) {
   relation_entry insertPair =
     make_pair<string, relationNode*>(category, node);
}
这将有效且更加简洁(事实上,这就是您使用
std::make_pair
而不是首先直接调用构造函数的原因)

您应该知道这是C++11的向后兼容性问题。考虑这段C++ 98代码(我用<代码>图MAP>代码> >代码> > <代码> > <代码> TyPufF >:

#包括
#包括
使用命名空间std;//只是为了测试
结构关系节点{};
类型定义映射关系映射;
typedef relationMap::值\类型关系\条目;
void insertNode(字符串类别,relationNode*节点){
关系\u条目插入对=
制作_对(类别、节点);
}
int main(){
}
转到并尝试编译它。您将看到它在C++98模式下编译得很好,但在C++11和C++14模式下编译得不好

有关此问题的详细说明,请参阅


一句话:不要指定多余的类型参数,你会没事的。

你应该使用
make\u pair(category,node)
,而不指定实际的参数类型
make_pair()
正是为此而设计的,只需编写
关系项insertPair(类别、节点)。为什么这里需要
make\u pair
?(或者有用?我知道如果我们想推断成对的类型,这很有用,但在这种情况下,我们已经知道了目标对的类型。)@dyp:对。但我猜(或希望)OP的代码只是更复杂的东西的简化版本,其中
std::make_pair
是合理的。
   relation_entry insertPair =
     make_pair(category, node);
#include <map>
#include <string>
using namespace std; // just for testing

struct relationNode {};

typedef map<string, relationNode*> relationMap;
typedef relationMap::value_type relation_entry;

void insertNode(string category, relationNode* node) {
   relation_entry insertPair =
     make_pair<string, relationNode*>(category, node);
}

int main() {
}