我正在尝试编译以下程序:
#include<functional>
#include<iostream>
int main(int argc, char* argv[], char* env[]) {
std::function<int(int, int)> f = [i, &j] { return i + j; };
std::cout << f(5, 5);
}
为什么会出现以下错误:
a.cc:17:3: error: \u2018function\u2019 is not a member of \u2018std\u2019
即使我用“auto”替换它,编译器也会抱怨“f”没有命名类型。我尝试使用GCC 4.4.3和4.6.2。
答案 0 :(得分:6)
std::function<int(int, int)> f = [i, &j] { return i + j; };
这是错误的语法。
你真正想写的是:
std::function<int(int, int)> f =[](int i, int j) { return i + j; };
或者如果您想使用auto
,那么:
auto f =[](int i, int j) { return i + j; };
使用-std=c++0x
选项和gcc-4.6.2编译此代码。
答案 1 :(得分:0)
Polymorphic wrappers for function objects 是C ++ 11中的新功能。要在支持C ++ 0x(C ++ 11的草稿版本)的4.7之前的GCC安装中使用这些功能,您需要使用-std=c++0x
开关进行编译(请参阅here)。< / p>
对于GCC v4.7,它已切换为-std=c++11
(请参阅here)。