【问题标题】:C++ compile issue with c++11C++ 11 的 C++ 编译问题
【发布时间】:2015-09-14 03:34:40
【问题描述】:

我正在尝试从 make 文件编译一些 C++ 文件。我不断收到此错误:

<i> no member named 'to_time_t' in
      'std::__1::chrono::steady_clock'; did you mean
      'std::chrono::system_clock::to_time_t'? 
    time_t tnow = std::chrono::high_resolution_clock::to_time_t(now);

</i>

然后经过一些研究,我发现这是因为我没有使用 c++ 11。我使用的是 MAC OS X 10.10.2。所以我安装了brew,然后使用brew安装了gcc和g++ 4.9。但是,我仍然遇到同样的错误。有什么建议么?此代码在 linux 机器上运行。

任何帮助将不胜感激。

【问题讨论】:

  • 澄清一下,我确实通过更改路径和添加符号链接等来确保正在使用 g++ 4.9 版。
  • 符号链接?这听起来很可疑!是否通过添加编译器标志设置了c++11编译模式:-std=c++11
  • 是的,我在 make 文件中有这个

标签: c++ macos time compilation


【解决方案1】:

to_time_tsystem_clock 的成员,但不是(必然)steady_clockhigh_resolution_clock 的成员。您正在使用high_resolution_clock,在您的系统上,根据错误消息,它似乎是steady_clock 的别名,而不是system_clock 的别名。如果代码在另一个平台上为您工作,则可能是在该平台上,high_resolution_clocksystem_clock 的别名,但您不能总是依赖这种情况。

解决方案是只使用system_clock,如果您不想使用time_tsystem_clock 的分辨率至少应与time_t 一样高,因此在这里使用可能更高分辨率的时钟不会给您带来任何好处。或者,如果您只是想要当前时间,则首先使用 std::time 函数。

【讨论】:

  • 我认为这不是解决方案,因为我能够在 linux 上运行它
  • @hadis:我解释了为什么会这样。您真的阅读了我的全部答案吗?你有没有看过 high_resolution_clock 的文档?
  • 对不起,我错过了!我会试试你的解决方案
猜你喜欢
  • 1970-01-01
  • 2016-01-05
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多