【发布时间】:2012-11-15 08:45:26
【问题描述】:
下面的代码有什么问题?如果结构的第一个成员等于 0,它应该在结构列表中找到一个元素。编译器抱怨 lambda 参数不是谓词类型。
#include <iostream>
#include <stdint.h>
#include <fstream>
#include <list>
#include <algorithm>
struct S
{
int S1;
int S2;
};
using namespace std;
int main()
{
list<S> l;
S s1;
s1.S1 = 0;
s1.S2 = 0;
S s2;
s2.S1 = 1;
s2.S2 = 1;
l.push_back(s2);
l.push_back(s1);
list<S>::iterator it = find_if(l.begin(), l.end(), [] (S s) { return s.S1 == 0; } );
}
【问题讨论】:
-
我刚刚用 g++ 4.6.3 编译了你的代码,一切都正确编译了。这里没有错误信息。您使用的是哪个编译器?也许它还不了解 lambdas。
-
你用的是什么编译器?
-
啊哈。现在我觉得自己很愚蠢。编译器发出警告:lambda 表达式仅适用于 -std=c++0x 或 -std=gnu++0x [默认启用] 我认为这意味着它将默认启用。原来不是。傻我。尽管如此,还是感谢您的帮助。
-
不,这意味着默认情况下会启用实际警告(而不是由诸如
-Wall之类的某些编译器标志触发)。 -
老实说,我没有发现这个问题过于本地化。事实上,我什至没有看这个问题。简单看一下答案就足以记住实现