STL映射-没有匹配的构造函数

时间:2019-02-20 20:42:45

标签: c++11 dictionary

我有一个std映射,该映射将字符串与函数指针结合在一起,例如:

 std::map<std::string, void (*)()> funcs {
       {"print", &h::print},
       {"scan", &h::scan_cmd},
       {"connect", &h::stream},
       {"stream", &h::stream}
 };

其中h是已初始化此映射的封闭类:

class h {
public:
   void print();
   void scan();
   void connect();
   void stream();
   std::map<std::string, void (*)()> funcs {
           {"print", &h::print},
           {"scan", &h::scan_cmd},
           {"connect", &h::stream},
           {"stream", &h::stream}
     };
};

我收到此错误:

No matching constructor for initialization of 'std::map<std::string, void (*)()>' (aka 'map<basic_string<char>, void (*)()>')

我也尝试过以这种形式推入地图:

std::map<std::string, void (*)()> funcs;
funcs["print"] = &print;
funcs["scan"] = &scan_cmd;
funcs["connect"] = &stream;
funcs["stream"] = &stream;

但是后来我得到了这个错误:

Size of array has non-integer type ' const char [6]'

我不确定问题出在哪里-我的猜测是它的空白(*)()。我确定这是c ++ 11编译器。

1 个答案:

答案 0 :(得分:1)

void (*)()

是指向不带任何参数且不返回任何值的普通函数的指针。 在您的示例中,printstreamscan_cmdh类的非静态成员函数。定义指向h类成员函数的指针的语法类似于

void (h::*)()

尝试:

   std::map<std::string, void (h::*)()> funcs {
           {"print", &h::print},
           {"connect", &h::stream},
           {"stream", &h::stream}
     };