[英]could not convert from ‘<brace-enclosed initializer list>’ to map
[英]could not convert … from '<brace-enclosed initializer list>' to map
我现在尝试修复一个特定的故障大约两个小时,并且我已经掌握了知识。 有任何想法吗?
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
您需要在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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.