我在A类(A.hpp)中有两个静态std :: map声明为static:
typedef bool (*fct_pointer_t)(uint8 *msg, void *other);
typedef std::map<std::string, fct_pointer_t> map_string_to_fct_t;
typedef std::map<fct_pointer_t, std::string> map_fct_to_string_t;
class A {
static map_string_to_fct_t str_to_fct;
static map_fct_to_string_t fct_to_str;
}
我需要从A初始化这两个静态std :: map,并指向B类函数。这是在B.cpp文件中完成的:
map_string_to_fct_t A::str_to_fct = {
{"string1", &B::fct1},
{"string2", &B::fct2},
}
map_fct_to_t A::fct_to_str = {
{&B::fct1, "string1"},
{&B::fct2, "string2"},
}
B::fct1(uint8* msg, void*){
...
}
B::fct2(uint8* msg, void*){
...
}
为了让静态成员能够访问B的成员函数,我在B.hpp文件中声明B的朋友如下:
class B {
friend class A;
fct1(...);
fct2(...);
}
现在,为什么我在编译时遇到这个错误?
error: could not convert [...] from '<brace-enclosed initializer list>' to 'map_string_to_fct_t {aka std::map<std::basic_string<char>, bool (*)(uint8*, void*)>}
感谢您的帮助。
编辑:工作,因为成员职能是静态的
我做的另一个测试是将fct1和fct2作为静态成员函数放在A类中。它奏效了。所以B级不再存在了:
typedef bool (*fct_pointer_t)(uint8 *msg, void *other);
typedef std::map<std::string, fct_pointer_t> map_string_to_fct_t;
class A {
static map_string_to_fct_t str_to_fct;
static fct1(...);
static fct2(...);
}
map_string_to_fct_t A::str_to_fct = {
{"string1", &A::fct1},
{"string2", &A::fct2},
}
A::fct1(uint8* msg, void*){
...
}
A::fct2(uint8* msg, void*){
...
}