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);
}
导致错误&#34;无法转换&#39;类别&#39; (键入&#39; std :: string(又名std :: basic_string(char))&#39;)键入&#39; std :: basic_string(char)&amp;&amp;&#34; 并且&#34;的错误无法转换节点&#39; (键入&#39; relationNode *&#39;)键入&#39; relationNode *&amp;&amp;&#34;。
我打算制作这对,然后将其插入到unordered_map中。
我正在使用&#34; g ++ -g -O0 -Wall -Wextra -std = gnu ++ 11&#34;编译代码。任何帮助将不胜感激。
答案 0 :(得分:1)
只需写下:
relation_entry insertPair =
make_pair(category, node);
这将使和更简洁(事实上,这就是你使用std::make_pair
而不是直接首先调用构造函数的原因)。
您应该知道这是C ++ 11的向后兼容性问题。考虑这段C ++ 98代码(我将unordered_map
替换为map
,将using
替换为typedef
):
#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() {
}
转到http://cpp.sh/并尝试编译它。你会发现它在C ++ 98模式下编译得很好,但在C ++ 11和C ++ 14模式下却没有。
有关该问题的详细说明,请参阅C++11 make_pair with specified template parameters doesn't compile
底线:不要指定冗余类型参数,你会没事的。