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表达式。