无法转换...从 '<brace-enclosed initializer list>' 到 地图

could not convert ... from '<brace-enclosed initializer list>' to map

本文关键字:gt list 地图 initializer lt 转换 brace-enclosed      更新时间:2023-10-16

我正在尝试修复一个特定的故障,现在大约两个小时,我完成了我的知识。什么好主意吗?

失败:

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;
    }