C++ 匿名函数;分析问题:预期表达式;

C++ 匿名函数;分析问题:预期表达式;,c++,anonymous-function,C++,Anonymous Function,我得到了名义上的错误,但我一生都不知道如何解决它。我已经在互联网上搜索了一段时间,但在大多数情况下,我找不到任何与我遇到的问题直接相关或解决问题的方法,我读到的所有关于匿名类的信息似乎都与我编写的代码一致 我想做的本质是;我有一个结构,我希望该结构包含一个函数指针。我遇到的问题是,当我定义一个结构实例时,我试图创建一个匿名函数并将其传递给结构。但它给了我一个编译错误 无论如何,这里是实际问题的详细信息,错误发生在这一行 [&](int x) { this->moveLeft();

我得到了名义上的错误,但我一生都不知道如何解决它。我已经在互联网上搜索了一段时间,但在大多数情况下,我找不到任何与我遇到的问题直接相关或解决问题的方法,我读到的所有关于匿名类的信息似乎都与我编写的代码一致

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

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

[&](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];
    };

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

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


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

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

你来自JavaScript吗?我明白了,你的代码让我想起了JavaScript。无论如何,lambda对于functor来说是很好的、干净的语法,并且函数指针与它们不兼容,如果您想存储lambda,请使用
std::function myFunc=[&](int x){this->moveLeft();}@Jesse@stileScrishmm,所以我改为使用std::function,但我遇到了同样的问题。同样的错误,同样的地方。我所做的更改是:
void(*execute)(int)变成
std::函数执行
[&](intx){this->moveLeft();}变成了
[](战斗人员*用户){user->moveLeft();}您确定lambda表达式在编译器中可用并已启用吗??否则,我现在有点不知所措……对,我研究了一下,是的,显然Clang还不支持lambda函数。我会在附近找份工作的。不过非常感谢你的帮助。什么是[&]?这是新规范中的一个吗?是的,我最初使用的是[](战斗用户){},但我在摆弄参数,看看是否能解决问题。不幸的是,这些都不起作用,我将尝试std::function。Michael,这是一个C++11 lambda表达式。