首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法改变..。从<括号括起来的初始化器list>‘到映射

无法改变..。从<括号括起来的初始化器list>‘到映射
EN

Stack Overflow用户
提问于 2015-08-25 17:19:10
回答 1查看 1.9K关注 0票数 2

我正试图修复一个具体的故障大约两个小时,我已经完成了我的知识。有什么想法吗?

失败:

代码语言:javascript
复制
could not convert '{{TEST1, (& ffm::cond_test1)}, {TEST2, (& ffm::cond_test2)}}' from '<brace-enclosed initializer list>' to 'std::map<ffm::conditions, bool (*)()>'

守则:

代码语言:javascript
复制
#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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 17:29:21

您需要将您的函数定义为前面的ffm::。这是因为您的using指令仅仅意味着无需使用ffm::就可以调用cond_test1/cond_test2。如果您不将ffm::放在正确的定义之前,它们将类似于函数的更多重载(::cond_test1::cond_test2),编译器将无法区分您希望ffm::cond_test1还是::cond_test1的重载,因为名称空间不需要命名)。

代码语言:javascript
复制
    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;
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32210230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档