【发布时间】:2014-09-30 00:18:14
【问题描述】:
我正在运行下面的代码来检查data_timestamp 是否超过两周。如果超过两周,则打印hello,否则打印world。
我是一名 Java 开发人员,最近开始使用 C++。在互联网上学到了一些东西,所以我在这个程序中使用它。我没有意识到并非所有代码都可以使用 C++11 功能运行。
#include <ctime>
#include <chrono>
#include <iostream>
int main()
{
uint64_t data_timestamp = 1406066507000;
const auto now = std::chrono::system_clock::now();
auto twoWeeks = std::chrono::hours(24 * 14);
auto lastTwoWeeks = now - twoWeeks;
auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(lastTwoWeeks.time_since_epoch()).count();
std::cout << "Time stamp in milliseconds since UNIX epoch start: "<< millis << std::endl;
if (data_timestamp < millis) {
std::cout << "Hello";
} else {
std::cout << "World";
}
return 0;
}
目前上述代码使用 C++11 功能,但我使用上述两周大时间戳的代码逻辑的实际代码不支持 C++11,因此我正在寻找各种替代方案。
我还可以在这里使用什么不需要 C++11 的可移植性?我可以在这里使用<ctime> 或Boost.Chrono 吗?
任何与上述代码执行相同操作但不使用 C++11 功能的简单示例都会有很大帮助。
更新:-
下面是我正在尝试的代码 -
#include <boost/chrono/chrono.hpp>
#include <iostream>
int main()
{
uint64_t data_timestamp = 1406066507000;
const auto now = boost::chrono::system_clock::now();
auto twoWeeks = boost::chrono::hours(24 * 14);
auto lastTwoWeeks = now - twoWeeks;
auto millis = boost::chrono::duration_cast<boost::chrono::milliseconds>(lastTwoWeeks.time_since_epoch()).count();
std::cout << "Time stamp in milliseconds since UNIX epoch start: "<< millis << std::endl;
if (data_timestamp < millis) {
std::cout << "Hello";
} else {
std::cout << "World";
}
return 0;
}
当我使用make install -j4 编译代码时,下面是我回来的异常 -
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: ânowâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âtwoWeeksâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âlastTwoWeeksâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âmillisâ does not name a type
error: âmillisâ was not declared in this scope
【问题讨论】:
-
boost::chrono肯定是一个很好的选择... -
当然你可以使用 boost.chrono,因为 C++11 chrono 是基于它的
-
... 然后用具体的
boost::chrono数据类型替换auto声明。 -
@user2809564:正如他们所说,将所有
auto更改为显式类型,并将所有std::chrono::更改为boost::chrono::和include <boost/chrono.hpp> -
@user2809564 我警告过你
autoca。应用编辑前 30 分钟。你明白我们在说什么吗?!?