匿名函数,“解析问题:预期表达式”

时间:2012-02-21 05:53:06

标签: c++ anonymous-function

我得到了名义上的错误,但我不能为我的生活弄清楚如何解决它。我已经在互联网上搜索了一下,但是在大多数情况下我找不到任何与我所遇到的问题直接相关或解决的问题,而且我读到的关于匿名课程的所有信息似乎都同意我写的代码。

我正在努力做的事情的本质是;我有一个结构,我希望该结构包含一个函数指针。我遇到的问题是,当我定义结构的一个实例时,我正在尝试创建并向结构传递一个匿名函数。但它给了我一个编译错误。

无论如何,这里是实际问题的详细信息,错误发生在这一行,

[&](int x) { this->moveLeft(); };

它说“Parse Issue:Expected expression”并指向']'

以下代码

Combatant::CharacterData Combatant::characters = {
    /*Name      */"SomeName",
    /*Folder    */"SomeFolder",
    /*Offense   */1.0f,
    /*Defense   */1.0f,
    /*Combos    */{
        {KeyMemory(KeyMemory::MOVE_LEFT, KeyMemory::JUMP),
            [&](int x) { this->moveLeft(); };
        },
        {KeyMemory(KeyMemory::MOVE_LEFT, KeyMemory::JUMP),
            [&](int x) { this->moveLeft(); };
        }
    }
}

CharacterData结构由以下代码定义:

    struct Combo {
        KeyMemory controls;
        void (*execute)(int);
    };

    struct CharacterData {
        std::string name;
        std::string folder;
        float offense;
        float defense;
        Combo comboList[5];
    };

任何帮助,将不胜感激。 ^ _ ^

2 个答案:

答案 0 :(得分:0)

您可能需要使用std::function<void(int)>来保存您的lambda。 (特别是因为您使用[&])。

另外,我不确定[&]在全球范围内是否真的有意义。也许你应该传入对象来打电话moveLeft,然后使用[]。此外,该更改可能允许您使用简单的函数指针而不是std::function

答案 1 :(得分:0)

问题结果是,作为Xcode / Apple使用的编译器的Clang还不支持lambda函数。从我读到的内容来看,这个功能将来会出现。