2014-11-24 122 views
2

std::chrono应该在g++ 4.8.*中支持。但是,当我尝试使用它编译使用g++ 4.8.3时,它找不到各种声明。我当然在使用-std=c++11g ++ 4.8。* std :: chrono Undeclared

例如这个调用(从一个自动生成的文件,这就是为什么-std出现了两次):

g++-4.8 -g -msse2 -m64 <defines> <warnings> -std=c++11 -fexceptions -std=c++11 <includes'-path> -c <source-file.cpp> -o <out-path>

产生以下错误:

<source-file, line>: error: ‘std::chrono::monotonic_clock’ has not been declared

我没能找到verymuch那并不是立即编译器版本或丢失-std=c++11。从this推断,我不需要别的东西。

问题:怎么回事,我该如何解决?

回答

2

标准C++中没有std::chrono::monotonic_clock。然而,有一个std::chrono::steady_clock

公平地对待微软和各地的卷饼 - there was a monotonic_clock in the working drafts during the development of C++11 which was replaced by steady_clock

+0

从技术上讲,它的存在依赖于实现。例如,代码在MSVC中编译。谢谢。 – imallett 2014-11-24 19:41:19

+0

@imallett该标准允许实现在命名空间'std'和嵌套命名空间中添加其他名称,所以在某些实现中可能会有'std :: chrono :: i_like_burritos'。但是并不要求C++ 11中名称空间'chrono'有一个名为'i_like_burritos'(或'monotonic_clock')的成员。 (或C++ 14,这是一个耻辱,因为我真的喜欢墨西哥卷饼。) – Casey 2014-11-24 19:44:53

+0

当然。我只是说'std :: chrono :: monotonic_clock'是一个卷饼。 – imallett 2014-11-24 19:48:07

1

在我看来,(提供steady_clock但可能不是monotonic_clock),您可以使用这样的代码,以确定是否您使用的是旧库实现(即提供monotonic_clock但不steady_clock),或一个新的。

#if defined(__GLIBCXX__) && (__GLIBCXX__ < 20120322) 
typedef std::chrono::monotonic_clock steady_clock; 
#else 
typedef std::chrono::steady_clock steady_clock; 
#endif 

的邮戳以上对应于附带GCC 4.7.0,according to GNU所述的libstdC++。我希望对此代码进行任何改进或更正,例如支持libstdC++以外的库。

相关问题