繁体   English   中英

无法将…转换为&#39; <brace-enclosed initializer list> 到地图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM