我现在尝试修复一个特定的故障大约两个小时,并且我已经知道了。有任何想法吗?
失败:
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
指令仅表示无需使用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;
}
关于c++ - 无法将…从 '<brace-enclosed initializer list>'转换为 map ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32210230/