匿名函数,"Parse Issue: Expected Expression"

Anonymous Functions, "Parse Issue: Expected Expression"

本文关键字:Expected Expression Issue Parse 函数      更新时间:2023-10-16

我收到了这个有名无实的错误,但我一辈子都想不出如何解决它。我在互联网上搜索了很多,但在大多数情况下,我找不到任何与我遇到的问题直接相关或解决问题的东西,我读到的关于匿名类的所有信息似乎都与我写的代码一致。

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

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

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

上面写着"分析问题:预期表达式",并指向"]"

以下代码的

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

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

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

此外,我不确定[&]在全球范围内是否有意义。也许您应该传入要调用moveLeft的对象,并使用[]。此外,这种更改可能允许您使用简单的函数指针,而不是std::function

问题是Clang,Xcode/Apple使用的编译器,还不支持lambda函数。然而,从我所读到的内容来看,该功能将在未来推出。