'localtime_s':在VS2015中不是'std'的成员

时间:2018-06-22 13:09:37

标签: c++

以下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())。

1 个答案:

答案 0 :(得分:2)

每[标题] / 9

  

C标准的附录K描述了大量函数,以及关联的类型和宏,与许多传统的C库函数相比,它们“促进了更安全,更安全的编程”。函数名称的后缀为_s;它们中的大多数都提供了与C库函数相同的服务(带有后缀名),但是通常使用一个附加参数,其值是结果数组的大小。如果包含任何C ++头,则由实现定义,是否在全局名称空间中声明这些名称中的任何一个。 (它们都不在命名空间std中声明。)

强调我的

和表18将localtime_s列为成员,因此,由于[headers] / 9,我们知道它未在名称空间std中定义,如果存在,它将在全局中存在命名空间。尝试使用

::localtime_s(&tm, &time);

,如果仍然无法执行,则表示您的实现不支持它。