以下C ++代码无法在VS2015中编译:
#include <time.h>
#include <ctime>
void main()
{
const time_t t = std::time(nullptr);
std::tm tm = {};
std::localtime_s(&tm, &time);
}
错误消息是:
用于x86的Microsoft(R)C / C ++优化编译器版本19.00.24215.1 版权所有(C)Microsoft Corporation。保留所有权利。
t.cpp t.cpp(10):错误C2039:“ localtime_s”:不是“ std”的成员 C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ INCLUDE \ ctime(17):注意:请参见“ std”的声明 t.cpp(10):错误C2664:'errno_t localtime_s(tm * const,const time_t * const)':无法将参数2从'time_t(__cdecl *)(time_t * const)'转换为'const time_t * const' t.cpp(10):注意:在没有上下文可以进行这种转换的情况下
有什么解决方法? (不能使用std :: localtime())。
答案 0 :(得分:2)
每[标题] / 9
C标准的附录K描述了大量函数,以及关联的类型和宏,与许多传统的C库函数相比,它们“促进了更安全,更安全的编程”。函数名称的后缀为_s;它们中的大多数都提供了与C库函数相同的服务(带有后缀名),但是通常使用一个附加参数,其值是结果数组的大小。如果包含任何C ++头,则由实现定义,是否在全局名称空间中声明这些名称中的任何一个。 (它们都不在命名空间std中声明。)
强调我的
和表18将localtime_s
列为成员,因此,由于[headers] / 9,我们知道它未在名称空间std
中定义,如果存在,它将在全局中存在命名空间。尝试使用
::localtime_s(&tm, &time);
,如果仍然无法执行,则表示您的实现不支持它。