我现在试图解决一个特定的失败大约两个小时,而且我完成了我的知识。任何想法?
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
答案 0 :(得分:2)
您需要将您的功能定义为ffm::
。这是因为您的using
指令只是意味着可以在不使用cond_test1
的情况下调用cond_test2
/ ffm::
。如果你没有把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;
}