提问人:float 提问时间:6/20/2023 最后编辑:float 更新时间:6/20/2023 访问量:91
C++ 无法将初始值设定项列表转换为映射
C++ cannot convert initializer list to map
问:
我在头文件中声明了一个映射,该文件将 2 个字符串映射到另一个 cpp 文件中的函数指针。但是,我收到以下错误:
Error C2440 'initializing': cannot convert from 'initializer list' to 'std::map<std::string,std::map<std::string,std::function<void (Comp::Abc::Ptr,int)>
我的头文件如下:
#include "../Comp/include/ABC.h"
#include <map>
#include <string>
#include <functional>
namespace Comp {
std::map<std::string, std::map<std::string, std::function<void(Comp::Abc::Ptr, int)>>> myMap = {
{"Abc1", {
{"QType", [](Comp::Abc1::Ptr abc, int arg) {
abc->setQType(static_cast<EnumTYPEDEF_Q_TYPE>(arg)); }},
{"Counter", [](Comp::Abc1::Ptr abc, int arg) { abc->setCounter(arg); }},
{"GroupId", [](Comp::Abc1::Ptr abc, int arg) { abc->setGroupId(arg); }},
}},
{"Abc2", {
{"Type", [](Comp::Abc2::Ptr abc, int arg) { abc->setType(arg); }},
}},
}
};
其他文件包括: ABC.h
namespace Comp{
class Abc{
virtual void setCounter(int c){}
virtual void setType(int c){}
virtual void setGroupId(int c){}
virtual void setQType(EnumTYPEDEF_Q_TYPE c){}
}
class Abc1:public Abc{
virtual void setCounter(int c);
virtual void setGroupId(int c);
virtual void setQType(EnumTYPEDEF_Q_TYPE c);
}
class Abc2:public Abc{
virtual void setType(int c);
}
};
和 abc.cpp
namespace Comp{
void Abc1 :: setCounter(int c){
//some code
}
void Abc1 :: setGroupId(int c){
//some code
}
void Abc1 :: setQType(EnumTYPEDEF_Q_TYPE c){
//some code
}
void Abc2 :: setType(int c){
//some code
}
}
地图已正确声明,我无法理解错误。
其中一些函数将枚举作为输入参数,但这是由静态强制转换处理的。
我还尝试使用模板作为函数指针:
template<typename ArgType>
using MemberFunctionPtr = void (Comp::Abc1::*)(ArgType);
std::map<std::string, std::map<std::string, MemberFunctionPtr<int>>> myMap;
但这也没有奏效。
答: 暂无答案
评论