我错过了什么?

时间:2012-03-29 16:44:11

标签: c++

我正在尝试编译以下程序:

#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。

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)。