无法使用与时间和时钟相关的函数 C++ 进行编译
Can't compile with time- and clock-related functions C++
我开始 my first GNU project based on another GNU project 改进它并更改实现。
我尝试实现自己的构建方法,但与时间和时钟相关的函数破坏了我的构建。
我在 Stack Overflow 上看了很多问题,但我对 chrono
、ctime
和 time.h
.
这三个库很困惑
这是构建错误:
/src/gamed/Logger.cpp
#include "Logger.h"
#include <errno.h>
#include <string.h>
#include <stdarg.h>
#include <time.h>
const std::string Logger::CurrentDateTime()
{
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct);
return buf;
}
错误:找不到时间、本地时间和 strftime 标识符
/src/gamed/Packets.h
#ifndef _PACKETS_H
#define _PACKETS_H
#include <time.h>
#include <cmath>
#include <set>
{...}
class GamePacket : public BasePacket {
public:
GamePacket(uint8 cmd = 0, uint32 netId = 0) : BasePacket(cmd, netId) {
buffer << (uint32)clock();
}
};
Error: clock identifier not found
/src/gamed/Pathfinder.cpp
#include "Logger.h"
#include "Pathfinder.h"
#include "Map.h"
#include "AIMesh.h"
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <chrono>
#include "Logger.h"
#include "Minion.h"
#include "Champion.h"
Map * Pathfinder::chart = 0;
auto g_Clock = std::clock();
Error: clock isn't member of std
我做错了什么?
在 C++ 中,您应该在所有 C 库 #include
上使用 "c" 前缀。
所以#include <time.h>
应该变成:#include <ctime>
.
但请注意,当您使用 #include <ctime>
时,time.h 中的所有内容现在都将位于 std
命名空间中。
所以clock()
必须变成std::clock()
。
有关详细信息,请参阅:http://www.parashift.com/c++-faq/include-c-hdrs-system.html
I very confused with the three libraries chrono, ctime and time.h.
那句话里只有2个图书馆。 <chrono>
是 c++ 标准库的一部分,在 c++11 版本的标准中引入。 None 的代码似乎使用了 <chrono>
中的任何内容。 <time.h>
是 c 标准库的一部分。 <ctime>
是 c++ 标准库中的 header,它将 <time.h>
包装在 std
命名空间内,而不是全局命名空间,后者是 c.[=28= 中唯一的 "namespace" ]
#include <time.h>
// ....
auto g_Clock = std::clock();
Error: clock isn't member of std
您包含了 c header 但尝试引用 std
命名空间。那是不正确的。改为包含 <ctime>
,这样 clock
就会在 std
.
中
#include <time.h>
// ...
time_t now = time(0);
Error: time (...) identifier not found
乍一看,您的代码似乎是正确的。仔细检查这实际上是您正在编译并从中获取错误的代码。这是该函数的简化版本,可以很好地编译 http://coliru.stacked-crooked.com/a/664f568053103f32
从风格上讲,我不建议混合使用 <cXXX>
和 <XXX.h>
header。选一个。
已解决!
问题是项目使用 enet 库,并且有 time.h,将文件重命名为 enet_time.h 构建工作很好(这是临时修复,我认为使用命名空间更好)。
感谢大家,很抱歉给您带来不便,感谢大家的回复,我学到了更多关于将 C 库包装到 C++ 中的知识。
一声问候
我开始 my first GNU project based on another GNU project 改进它并更改实现。
我尝试实现自己的构建方法,但与时间和时钟相关的函数破坏了我的构建。
我在 Stack Overflow 上看了很多问题,但我对 chrono
、ctime
和 time.h
.
这是构建错误:
/src/gamed/Logger.cpp
#include "Logger.h"
#include <errno.h>
#include <string.h>
#include <stdarg.h>
#include <time.h>
const std::string Logger::CurrentDateTime()
{
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct);
return buf;
}
错误:找不到时间、本地时间和 strftime 标识符
/src/gamed/Packets.h
#ifndef _PACKETS_H
#define _PACKETS_H
#include <time.h>
#include <cmath>
#include <set>
{...}
class GamePacket : public BasePacket {
public:
GamePacket(uint8 cmd = 0, uint32 netId = 0) : BasePacket(cmd, netId) {
buffer << (uint32)clock();
}
};
Error: clock identifier not found
/src/gamed/Pathfinder.cpp
#include "Logger.h"
#include "Pathfinder.h"
#include "Map.h"
#include "AIMesh.h"
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <chrono>
#include "Logger.h"
#include "Minion.h"
#include "Champion.h"
Map * Pathfinder::chart = 0;
auto g_Clock = std::clock();
Error: clock isn't member of std
我做错了什么?
在 C++ 中,您应该在所有 C 库 #include
上使用 "c" 前缀。
所以#include <time.h>
应该变成:#include <ctime>
.
但请注意,当您使用 #include <ctime>
时,time.h 中的所有内容现在都将位于 std
命名空间中。
所以clock()
必须变成std::clock()
。
有关详细信息,请参阅:http://www.parashift.com/c++-faq/include-c-hdrs-system.html
I very confused with the three libraries chrono, ctime and time.h.
那句话里只有2个图书馆。 <chrono>
是 c++ 标准库的一部分,在 c++11 版本的标准中引入。 None 的代码似乎使用了 <chrono>
中的任何内容。 <time.h>
是 c 标准库的一部分。 <ctime>
是 c++ 标准库中的 header,它将 <time.h>
包装在 std
命名空间内,而不是全局命名空间,后者是 c.[=28= 中唯一的 "namespace" ]
#include <time.h>
// ....
auto g_Clock = std::clock();
Error: clock isn't member of std
您包含了 c header 但尝试引用 std
命名空间。那是不正确的。改为包含 <ctime>
,这样 clock
就会在 std
.
#include <time.h>
// ...
time_t now = time(0);
Error: time (...) identifier not found
乍一看,您的代码似乎是正确的。仔细检查这实际上是您正在编译并从中获取错误的代码。这是该函数的简化版本,可以很好地编译 http://coliru.stacked-crooked.com/a/664f568053103f32
从风格上讲,我不建议混合使用 <cXXX>
和 <XXX.h>
header。选一个。
已解决!
问题是项目使用 enet 库,并且有 time.h,将文件重命名为 enet_time.h 构建工作很好(这是临时修复,我认为使用命名空间更好)。
感谢大家,很抱歉给您带来不便,感谢大家的回复,我学到了更多关于将 C 库包装到 C++ 中的知识。
一声问候