我正在尝试编写一个以字符串形式返回日期的函数。我这样做是这样的:
string date() // includes not listed for sake of space, using namespace std
{
tm timeStruct;
int currentMonth = timeStruct.tm_mon + 1;
int currentDay = timeStruct.tm_mday;
int currentYear = timeStruct.tm_year - 100;
string currentDate = to_string(currentMonth) + "/" + to_string(currentDay) + "/" + to_string(currentYear);
return currentDate;
}
这给出了四个编译时错误。 其中一个:
to_string was not declared in this scope
和其中3个:
Function to_string could not be resolved
每次使用to_string一次。
根据互联网上的其他地方,这段代码应该有效。有人可以就这个问题说清楚吗?
答案 0 :(得分:3)
正如评论中所提到的,您尝试使用的内容需要C ++ 11。这意味着支持C ++ 11的编译器(例如GCC 4.7+)和可能手动启用C ++ 11(例如标志-std=c++11
),所以如果您认为它应该适合您,请检查这两者
如果您遇到不支持C ++ 11的编译器,您可以使用以下内容通过常规C ++实现您的目标:
string date()
{
tm timeStruct;
int currentMonth = timeStruct.tm_mon + 1;
int currentDay = timeStruct.tm_mday;
int currentYear = timeStruct.tm_year - 100;
char currentDate[30];
sprintf(currentDate, "%02d/%02d/%d", currentMonth, currentDay, currentYear);
return currentDate; // it will automatically be converted to string
}
请注意,对于日期和月份参数,我使用%02d
强制它显示至少2位数,因此5/1
实际上将表示为05/01
。如果您不想这样,则可以改为使用%d
,其行为与原始to_string
相同。 (我不确定您为currentYear
使用的格式,但您可能还希望对该参数使用%02d
或%04d
答案 1 :(得分:1)
std::to_string
是C ++ 11的一部分,位于<string>
标题中。以下代码适用于g ++ 4.7,以及clang和VC ++的最新版本。如果使用这些内容编译文件不适合您,则要么是为C ++ 11错误地调用了编译器,要么是使用对C ++ 11支持不足的编译器版本。
#include <string>
int main() {
int i;
auto s = std::to_string(i);
}
但是有一种更好的方法可以在C ++ 11中打印日期。这是一个打印当前日期的程序(采用ISO 8601格式)。
#include <ctime> // time, time_t, tm, localtime
#include <iomanip> // put_time
#include <iostream> // cout
#include <sstream> // stringstream
#include <stdexcept> // runtime_error
#include <string> // string
std::string date() {
static constexpr char const *date_format = "%Y-%m-%d"; // ISO 8601 format
auto t = std::time(nullptr);
if (static_cast<std::time_t>(-1) == t) {
throw std::runtime_error{"std::time failed"};
}
auto *cal = std::localtime(&t);
if (nullptr == cal) {
throw std::runtime_error{"std::localetime failed"};
}
std::stringstream ss;
ss << std::put_time(cal, date_format);
return ss.str();
}
int main() { std::cout << date() << '\n'; }
不幸的是,gcc 4.8似乎缺少put_time
(当然VC ++目前缺少constexpr
和通用初始化程序,但这很容易解决.VC ++有put_time
)。