8

我在 gcc 下编译代码时遇到了一些非常奇怪的错误。它告诉我std::function不存在。

我可以使用以下代码重新创建错误:

#include <functional>
#include <stdio.h>

void test(){ printf ("test"); }

int main() {
    std::function<void()> f;
    f = test;
    f();
}

如果我运行 gcc(来自 cygwin):(我的错误消息是德语,所以我翻译了它。在英语 gcc 上听起来可能不同)

$ gcc test.cpp
test.cpp: in function "int main(): 
test.cpp:7:3: Error: "function" is not an element of "std"« 
test.cpp:7:25: Error: "f" was not defined in this scope

使用 MSVC 编译成功。请告诉我我在代码中做错了什么。

约翰内斯

4

2 回答 2

18

编译为:

g++ test.cpp -std=c++0x

-std=c++0x需要,因为您使用的是 C++11 功能,否则g++ test.cpp就足够了。

确保您拥有最新版本的 GCC。您可以检查版本为:

g++ --version
于 2012-06-13T15:32:04.280 回答
3

您需要在C++模式和C++11模式下编译。因此,您需要g++-std标志设置为c++0x.

g++ test.cpp -std=c++0x

您也可以-std=c++11从 gcc 4.7 开始使用。

于 2012-06-13T15:32:04.927 回答