主要代码:
using TransMap = unordered_map<::string,astring>;
///返回得到的语言数量
TransMap *currentTranslates
unordered_map<::string,TransMap> summTrans;
TransMap d;
string n = ...;
astring a = ...;
d.insert(std::make_pair<string,astring>(n,a));
报错:
error: no matching function for call to 'make_pair<std::__cxx11::string, alib::astring>(std::__cxx11::string&, alib::astring&)'|
就奇怪,不是value支持自定义的类型吗,key的话写个hash函数也支持自定义类型
另外astring虽然是dll类,但是已经用了extern "C"改编,并且刚才我不改编它编译后仍然报同样的错误
如果使用自动推导又会出现这样的错误:
error: no matching function for call to 'std::unordered_map<std::__cxx11::basic_string<char>, alib::astring>::insert(std::pair<std::__cxx11::basic_string<char>, alib::astring>)'|
//他这个函数搁这隔这呢!
平台:
Windows
C++17
G++: gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
前面加个 std::unordered_map<::string,TransMap> summTrans;
试一下
这个问题是由于std::make_pair
函数的调用方式不正确导致的。
问题出现在以下代码中:
d.insert(std::make_pair<string, astring>(n, a));
std::make_pair
是一个模板函数,它会根据传入的参数类型自动推导出返回类型。所以在这里你不需要显式指定模板参数,只需要传入正确的参数即可。
请尝试修改如下代码:
d.insert(std::make_pair(n, a));
这样应该就可以解决编译错误了。
关于第二个错误,你可以尝试使用emplace
函数来插入键值对,它会更高效地构造元素。请修改如下:
d.emplace(n, a);
这样应该就能够成功插入键值对了。
完整的代码应该是这样的:
using TransMap = std::unordered_map<::std::string, astring>;
// 返回得到的语言数量
TransMap *currentTranslates;
std::unordered_map<::std::string, TransMap> summTrans;
TransMap d;
std::string n = ...;
astring a = ...;
d.emplace(n, a);
希望这能帮助到你解决问题。如果还有其他疑问,请随时提问。
参考一下这个代码
#include <iostream>
#include <map>
#include <unordered_map>
using namespace std;
class Penis
{
int length;
public:
Penis(int&&);
};
Penis::Penis(int&& x)
{
length=x;
}
int main()
{
unordered_map<int, Penis*> dick;
Penis my_penis = Penis(514);
dick.insert(make_pair<int, Penis*>(114, &my_penis));
}