我基于my first GNU project开始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();
}
};
错误:找不到时钟标识符
/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();
错误:时钟不是标准的成员
我做错了什么?
答案 0 :(得分:4)
我对三个库chrono,ctime和time.h非常困惑。
该句中只有2个图书馆。 <chrono>
是c ++标准库的一部分,并在标准的c ++ 11版本中引入。您的代码似乎都没有使用<chrono>
中的任何内容。 <time.h>
是c标准库的一部分。 <ctime>
是c ++标准库中的标头,它将<time.h>
包装在std
名称空间内,而不是全局名称空间,这是c中唯一的“名称空间”。
#include <time.h>
// ....
auto g_Clock = std::clock();
错误:时钟不是标准的成员
您包含了c标头,但尝试引用std
命名空间。这是不正确的。请改为使用<ctime>
,以便clock
位于std
。
#include <time.h>
// ...
time_t now = time(0);
错误:找不到时间(...)标识符
乍一看,你的代码似乎是正确的。仔细检查实际上是您正在编译的代码并从中获取错误。这是编译精细http://coliru.stacked-crooked.com/a/664f568053103f32
的函数的简化版本 Stylewise,我不建议混合<cXXX>
和<XXX.h>
标题。选一个。
答案 1 :(得分:3)
解决!
问题是项目使用enet库,并且有time.h,将文件重命名为enet_time.h,构建工作很棒(它的临时修复,我认为使用命名空间更好)。
感谢所有人,对于给您带来的不便感到抱歉,由于所有回复,我学到了更多关于将C库包装到C ++中的信息。
问候语
答案 2 :(得分:1)
在C ++中你应该使用&#34; c&#34;所有C库#include
上的前缀。
因此#include <time.h>
应该变为:#include <ctime>
。
但请注意,当您使用#include <ctime>
时,time.h中的所有内容现在都位于std
命名空间中。
因此clock()
必须成为std::clock()
。
有关详细信息,请参阅:http://www.parashift.com/c++-faq/include-c-hdrs-system.html