免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 20748 | 回复: 13

[C++] 'std::this_thread' has not been declared [复制链接]

论坛徽章:
0
发表于 2013-04-09 22:56 |显示全部楼层
本帖最后由 softmachine 于 2013-04-09 23:08 编辑

操作系统:XP
IDE工具:code::blocks 12.11
编译器版本:mingw32-g++ 4.7.1
编译参数:mingw32-g++.exe -std=c++11 -std=c++0x -pthread -D_GLIBCXX_USE_NANOSLEEP -D_GLIBCXX_USE_SCHED_YIELD  -g     -c D:\CodeBlocksProjects\MyServer\MyServer\main.cpp -o obj\Debug\main.o

报错信息如下:

D:\CodeBlocksProjects\MyServer\MyServer\main.cpp: In function 'void foo()':
D:\CodeBlocksProjects\MyServer\MyServer\main.cpp:11:10: error: 'std::this_thread' has not been declared
D:\CodeBlocksProjects\MyServer\MyServer\main.cpp: In function 'int main()':
D:\CodeBlocksProjects\MyServer\MyServer\main.cpp:22:5: error: 'thread' is not a member of 'std'
D:\CodeBlocksProjects\MyServer\MyServer\main.cpp:22:17: error: expected ';' before 't'
Process terminated with status 1 (0 minutes, 0 seconds)
3 errors, 0 warnings (0 minutes, 0 seconds)


=================================================================
编译的代码为:

#include <iostream>
#include <thread>
#include <chrono>


void foo()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}


int main()
{
    std::thread t(foo);
    t.join();
    return 0;
}


该怎么解决以上的编译报错问题,-std=c++11 和相关的宏参数都已加上了问题依旧,难道是版本不支持??

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2013-04-09 23:17 |显示全部楼层
用c++11, 向脑残进发。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:15程序设计版块每日发帖之星
日期:2015-09-21 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-22 14:11:11程序设计版块每日发帖之星
日期:2015-09-25 06:20:00每日论坛发贴之星
日期:2015-09-25 06:20:00
发表于 2013-04-09 23:25 |显示全部楼层
答案应该在这里吧http://stackoverflow.com/questio ... nanosleep-all-about,_GLIBCXX_USE_NANOSLEEP这个宏没定义
  1. #ifdef _GLIBCXX_USE_NANOSLEEP
  2. ...
  3. /// sleep_for
  4. template<typename _Rep, typename _Period>
  5.   inline void
  6.   sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
  7. ...
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:15程序设计版块每日发帖之星
日期:2015-09-21 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-22 14:11:11程序设计版块每日发帖之星
日期:2015-09-25 06:20:00每日论坛发贴之星
日期:2015-09-25 06:20:00
发表于 2013-04-09 23:30 |显示全部楼层
不过比较奇怪的是编译参数里边已经加入-D_GLIBCXX_USE_NANOSLEEP了{:3_182:}

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
发表于 2013-04-10 08:36 |显示全部楼层
我用mingw4.7.2搞过,没能搞起来,缺太多本地的实现

而对于你的这个编译错误,只要打开<thread>看一下就明白了,比如我我看到
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
所以,只要在我的代码#include <thread>前加上
#define _GLIBCXX_HAS_GTHREADS
#define _GLIBCXX_USE_C99_STDINT_TR1
就行

论坛徽章:
0
发表于 2013-04-10 08:45 |显示全部楼层
bruceteen 发表于 2013-04-10 08:36
我用mingw4.7.2搞过,没能搞起来,缺太多本地的实现

而对于你的这个编译错误,只要打开看一下就明白了, ...



这两个宏我也试过,这样的结果是报18个错误,都来自thread头文件中。

论坛徽章:
0
发表于 2013-04-10 08:55 |显示全部楼层
bruceteen 发表于 2013-04-10 08:36
我用mingw4.7.2搞过,没能搞起来,缺太多本地的实现

而对于你的这个编译错误,只要打开<thread>看一下就明白了,比如我我看到
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
所以,只要在我的代码#include <thread>前加上
#define _GLIBCXX_HAS_GTHREADS
#define _GLIBCXX_USE_C99_STDINT_TR1
就行


加上以上两个宏定义后,会报thread头文件中一些变量或类型没有定义,诸如:
d:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\thread|63|error: '__gthread_t' does not name a type|
之类的。。。。。。。

论坛徽章:
0
发表于 2013-04-10 09:31 |显示全部楼层
升级到4.8应该就没这个问题了。gcc4.8修正了sleep_for的一些宏依赖

论坛徽章:
0
发表于 2013-04-15 09:03 |显示全部楼层
mingw的GCC4.7版本貌似c++11的thread有点问题,已经转向boost::thread。boost::thread运行良好。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
发表于 2013-07-17 16:30 |显示全部楼层
http://sourceforge.net/projects/mingwbuilds/ 下载 mingw-builds-install.exe
安装时,第二步的线程模式选择 posix,千万不能选 windows

我安装的是最新的 4.8.1,你的代码顺利编译运行通过
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP