首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++11:现代g++上的"put_time不是性病的成员“

C++11:现代g++上的"put_time不是性病的成员“
EN

Stack Overflow用户
提问于 2017-07-13 02:43:47
回答 1查看 15.1K关注 0票数 13

我在一个新编译器上遇到了一个老问题。在尝试使用std::chrono打印当前时间时,我收到以下错误:

代码语言:javascript
运行
复制
src/main.cpp:51:30: error: ‘put_time’ is not a member of ‘std’
                 std::cout << std::put_time(std::localtime(&time), "%c") << "\n\n";
                              ^~~

令人反感的片段没有什么特别之处:

代码语言:javascript
运行
复制
#include <chrono>
...
auto time = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
std::cout << std::put_time(std::localtime(&time), "%c") << "\n\n";

这看起来很像GCC 4.x系列中返回的错误,因为这里到处都引用了:

这个理论唯一的问题是,我的GCC是现代的:

代码语言:javascript
运行
复制
$ g++ --version
g++ (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我还检查了我的应用程序是否与适当的库链接:

代码语言:javascript
运行
复制
$ ldd build/myapp
        ...
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fde97e7b000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fde97595000)

最后,在我的编译标志中没有任何异国情调:

代码语言:javascript
运行
复制
g++ -g -Wall -Werror -std=c++11 -Wno-sign-compare src/main.cpp -c -o obj/main.o

我能想到的每一件事都表明这应该是可行的。那么,简而言之,是什么原因呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-13 02:51:29

问题是您包含了错误的标题。std::put_time是在<iomanip>而不是<chrono>中声明的。

此外,它也没有抱怨任何其他的时间操作,如std::localtimeto_time_t

std::localtime<ctime>中声明。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45070588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档