我错过了什么

What include am I missing?

本文关键字:什么 错过了      更新时间:2023-10-16

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

#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: u2018functionu2019 is not a member of u2018stdu2019

即使我用"auto"替换它,编译器也会抱怨"f"没有命名类型。我尝试了GCC 4.4.3和4.6.2。

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一起使用来编译此代码。

函数对象的多态包装器在C++11中是新的。要在4.7之前的GCC安装中使用这些功能,并支持C++0x(C++11的草案版本),您需要使用-std=c++0x开关进行编译(请参阅此处)。

对于GCC v4.7,则切换为-std=c++11(请参见此处)。

相关文章: