2013-04-26 50 views
2

我做了功课,并在网上搜索了一个答案。以下简单的代码不编译:minGW(带g ++ 4.7.1)不编译简单的C++ 11代码(在WinVista下)

#include <thread> 
#include <iostream> 

void hello() 
{ 
    std::cout << "Hello from thread " << std::endl; 
} 

int main() 
{ 
    std::thread t1(hello); 
    t1.join(); 
    return 0; 
} 

这是非常简单的代码,但我发现了以下错误:

Thread_Cpp11_002.cpp: In function 'int main()' 
Thread_Cpp11_002.cpp:14:5: error: 'thread' is not a member of 'std' 
Thread_Cpp11_002.cpp:14:17: error: expected ';' before 't1' 
Thread_Cpp11_002.cpp:15:5: error: 't1' was not declared in this scope 

而且我已经尝试了很多事情,没有一个是有工作:

  1. 使用thread声明t1代替std::thread
  2. 使用g ++ 4.8编译。 0
  3. 使用下面的标志,单独和集体:-pthread-std=gnu++11-std=c++0x-std=c++11...

所以,我认为这个问题值得被张贴在这里。

这些编译是通过命令行完成的。我有它的工作后,我会尝试使用Code :: Blocks 12.11,它适用于C++ 98。

请记住,我正在使用Windows Vista。

+0

没有关于缺少'#include'的错误? – zneak 2013-04-26 02:07:29

+0

你传递给编译器的参数是什么?它应该有-std = C++ 11。 – Elazar 2013-04-26 02:08:32

+0

@zneak,我也试图改变使用“thread.h”或,在这两种情况下编译neiher发起(没有这样的文件)。 – ajmacedo 2013-04-26 02:28:25

回答

1

这是一个众所周知的问题,一些MinGW版本(只需在您的favorite engine中搜索mingw thread)。如果您需要线程支持,则必须使用其他库(例如boost或本机Windows API)或不同的版本。

+0

我已经尝试了最后3个小时......并失败!我快要放弃了。我阅读了各种相关的帖子,似乎我将不得不越来越多地学习编译器,而我只是想尝试C++ 11。不幸的是,我使用Vista并不符合MSVC 2012 Express,即具有C++ 11功能。 – ajmacedo 2013-04-26 06:22:22

+0

@ajmecedo:这就是为什么@jerry提到'boost'。 boost提供'线程'的前C + + - 11编译器,如Visual Studio 2010. – 2013-04-26 11:48:17

+0

@ajmacedo我不能担保它,但显然http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases /4.8.0/64-bit/threads-posix/seh/支持C++ 11线程。如果您选择加强版,其网站是http://www.boost.org/。 – jerry 2013-04-27 04:03:22