我有将GUID(无符号长)映射到结构的C++代码。
#include <string>
#include <map>
#include <iostream>
typedef unsigned long GUID;
enum Function {
ADDER = 1,
SUBTRACTOR = 2,
MULTIPLIER = 3,
SQUAREROOT = 4
};
struct PluginInfo
{
GUID guid;
std::string name;
Function function;
PluginInfo(GUID _guid, std::string _name, Function _function) {guid = _guid, name = _name, function = _function;}
};
typedef std::map<GUID, PluginInfo> PluginDB;
PluginInfo temp1(1, "Adder", ADDER);
PluginInfo temp2(2, "Multiplier", MULTIPLIER);
PluginDB::value_type pluginDbArray[] = {
PluginDB::value_type(1, temp1),
PluginDB::value_type(2, temp2)
};
const int numElems = sizeof pluginDbArray / sizeof pluginDbArray[0];
PluginDB pluginDB(pluginDbArray, pluginDbArray + numElems);
int main()
{
std::cout << pluginDB[1].name << std::endl;
}
编译时,出现错误信息。
/usr/include/c++/4.2.1/bits/STL_map.h:
在成员函数“_Tp&
std::map _Alloc>::operator [](const _Key&)[with _Key = long unsigned int,_Tp = PluginInfo,_Compare = std::less,_Alloc =
std::allocator>]’:
mockup_api.cpp:58:从实例化
这里
/usr/include/c++/4.2.1/bits/STL_map.h:350:
错误:没有匹配的通话功能
到“PluginInfo::PluginInfo()”
mockup_api.cpp:29:注意:候选人
是:PluginInfo::PluginInfo(GUID,
std::string,函数)
mockup_api.cpp:24:注意:
PluginInfo::PluginInfo(const
PluginInfo&)
可能是什么问题?
最佳答案
您放置在STL容器中且使用初始数量的对象初始化的任何对象(即,您没有初始化一个空容器)必须至少具有一个默认构造函数,而您没有。换句话说,您当前的构造函数需要使用特定的对象进行初始化。必须有一个默认的构造函数,例如:
PluginInfo();
不需要初始化程序。另外,它们可以是默认的初始化程序,例如:
PluginInfo(GUID _guid = GUID(),
std::string _name = std::string(),
Function _function = Function()):
guid(_guid), name(_name), function(_function) {}
关于STL - C++“无匹配函数调用”结构错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5708514/