C++ 11:Modern g ++上的"put_time不是std的成员"

pho*_*594 7 c++ gcc c++11

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

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";
                              ^~~
Run Code Online (Sandbox Code Playgroud)

违规片段没什么特别之处:

#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";
Run Code Online (Sandbox Code Playgroud)

这看起来非常像GCC 4.x系列中返回的错误,如同所引用的那样:

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

$ 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.
Run Code Online (Sandbox Code Playgroud)

我还检查了我的应用程序是否链接到相应的库:

$ ldd build/myapp
        ...
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fde97e7b000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fde97595000)
Run Code Online (Sandbox Code Playgroud)

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

g++ -g -Wall -Werror -std=c++11 -Wno-sign-compare src/main.cpp -c -o obj/main.o
Run Code Online (Sandbox Code Playgroud)

我能想到检查的一切都表明这应该有效.那么,总之,给出了什么?

eer*_*ika 9

问题是你包含了错误的标题.std::put_time声明<iomanip>,而不是<chrono>.


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

std::localtime宣布在<ctime>.