我有将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/

10-11 16:10