2014-01-30 289 views
1

我使用Code :: Blocks 13.12與TDM-GCC(版本4.7.1,32位)。當我嘗試使用線程類時,出現以下錯誤: 'thread' is not a member of 'std'爲什麼我得到這個錯誤:'thread'不是'std'的成員?

我一定會#include <thread>。我啓用了編譯器標誌-std=c++11來告訴編譯器符合C++ 11標準。

我想也許我的GCC版本不夠新,所以我安裝了TDM-GCC 4.8.1;當我使用它的編譯器時,我沒有這個問題。然而,然後我讀到,GCC版本低至4.4支持C++ 11線程類,這意味着我有(4.7.1)的GCC的原始版本已經足夠了。有什麼問題?

回答

2

MinGW(包含在TDM-GCC中)帶有兩個用於線程的API之一:winpthreads(基於POSIX線程API,pthreads)或Win32線程API。如果你有一個Win32線程API的版本,std :: thread是disabled。 TDM-GCC 4.7.1使用Win32線程API,而TDM-GCC 4.8.1和更高版本使用winpthreads。這就是爲什麼編譯器成功的原因之一,而不是其他原因。

這導致了'thread' is not a member of 'std'問題2個可能的解決方案:

  • 安裝版本TDM-GCC的使用winpthreads(無論是獨立或與代碼::塊)。這意味着4.8.1或更高版本。
  • 使用MinGW installer,它允許您選擇要安裝的線程API。它還允許您選擇要安裝的MinGW版本(現在對應於包含GCC的版本),因此您甚至可以選擇比4.8.1更穩定的舊版本,例如4.7.3。
+0

這會影響MinGW64嗎?我似乎無法找到該網站上的任何內容,表明他們沒有解決這個問題。 – Mgetz

+0

@Mgetz我不能給你一個明確的答案,但我相信我的答案適用於MinGW 32位和64位。無論我在最新的MinGW-builds安裝程序中選擇哪個版本(4.7.x或4.8.x)和體系結構(「x32」或「x64」),它仍然允許我選擇任一線程API。不過,我不知道你指的是什麼網站,或者「這個」在「還沒有解決這個問題」中意味着什麼。 – Cerran

相關問題