У меня есть стандартная карта, которая объединяет строку с указателем функции, например:
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]'
Я не совсем уверен, где проблема - я предполагаю, что это с частью void (*) ().Я уверен, что это компилятор c ++ 11.