我正试图修复一个具体的故障大约两个小时,我已经完成了我的知识。有什么想法吗?
失败:
could not convert '{{TEST1, (& ffm::cond_test1)}, {TEST2, (& ffm::cond_test2)}}' from '<brace-enclosed initializer list>' to 'std::map<ffm::conditions, bool (*)()>'守则:
#include <map>
#include <iostream>
namespace ffm {
typedef bool (*condFunction)();
enum conditions {
TEST1 = 0,
TEST2
};
bool cond_test1();
bool cond_test2();
}
using namespace ffm;
bool cond_test1()
{
std::cout << "cond_test1 is always TRUE" << std::endl;
return true;
}
bool cond_test2()
{
std::cout << "cond_test2 is always FALSE" << std::endl;
return false;
}
int main() {
std::map<conditions, condFunction> condFuncMap = {
{conditions::TEST1, &cond_test1},
{conditions::TEST2, &cond_test2} };
}我使用的是gcc4.8.4
发布于 2015-08-25 17:29:21
您需要将您的函数定义为前面的ffm::。这是因为您的using指令仅仅意味着无需使用ffm::就可以调用cond_test1/cond_test2。如果您不将ffm::放在正确的定义之前,它们将类似于函数的更多重载(::cond_test1,::cond_test2),编译器将无法区分您希望ffm::cond_test1还是::cond_test1的重载,因为名称空间不需要命名)。
bool ffm::cond_test1()
{
std::cout << "cond_test1 is always TRUE" << std::endl;
return true;
}
bool ffm::cond_test2()
{
std::cout << "cond_test2 is always FALSE" << std::endl;
return false;
}https://stackoverflow.com/questions/32210230
复制相似问题