无法使用与时间和时钟相关的函数C ++进行编译

时间:2015-01-21 14:06:46

标签: c++ time build clock

我基于my first GNU project开始another GNU project以改进它并更改实施。

我尝试实现自己的构建方法,但时间和时钟相关的功能打破了我的构建。

我已经阅读了很多关于Stack Overflow的问题,但我对三个库chronoctimetime.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();
  

错误:时钟不是标准的成员

我做错了什么?

3 个答案:

答案 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