Ne peut pas compiler avec le temps de l'horloge et de fonctions liées à la C++
J'ai commencé à mon premier projet GNU basé sur un autre projet GNU de l'améliorer et de changer la mise en œuvre.
J'ai essayé de mettre en œuvre ma propre méthode build, mais le temps de l'horloge et les fonctions liées cassé mon construire.
J'ai lu beaucoup de questions sur Stack Overflow, mais j'ai confondu avec les trois bibliothèques chrono
, ctime
et time.h
.
C'est l'accumulation des erreurs:
/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;
}
Erreur: le temps, localtime et strftime identificateur introuvable
/src/gamed/Paquets.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();
}
};
Erreur: horloge identificateur introuvable
/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();
Erreur: l'horloge n'est pas membre de std
Ce que je fais mal?
#include <ctime>
pas time.h
.J'ai remplacé le temps.h <ctime>, et faire beaucoup d'erreurs sur #si GLOBAL_USING && !défini(RC_INVOKED) _STD_BEGIN à l'aide de _CSTD clock_t; à l'aide de _CSTD size_t; à l'aide de _CSTD time_t; à l'aide de _CSTD tm; à l'aide de _CSTD asctime; à l'aide de _CSTD horloge; à l'aide de _CSTD ctime; à l'aide de _CSTD difftime; à l'aide de _CSTD gmtime; à l'aide de _CSTD localtime; à l'aide de _CSTD mktime; à l'aide de _CSTD strftime; à l'aide de _CSTD temps; _STD_END #endif /* _GLOBAL_USING */ #endif /* _CTIME */
J'ai remplacé std::clock() avec l'horloge (), mais encore des erreurs
quel compilateur que vous utilisez?
user2079303: Visual Studio 2013 Ultimate sur Windows 8.1, mais j'ai travis-ci sur le référentiel et de montrer trop d'erreurs: travis-ci.org/FoxEmu/FoxEmu
OriginalL'auteur Ahri Love Dev | 2015-01-21
Vous devez vous connecter pour publier un commentaire.
Il y a seulement 2 bibliothèques dans cette phrase.
<chrono>
fait partie du standard c++ library et a été introduit en c++11 version de la norme. Aucun de votre code semblent utiliser quoi que ce soit à partir de<chrono>
.<time.h>
fait partie de la bibliothèque c standard.<ctime>
est un en-tête dans le c++ de la bibliothèque standard qui enveloppe<time.h>
à l'intérieur destd
espace de noms au lieu de espace de noms global qui est le seul "espace de noms" dans c.- Vous d'inclure les en-têtes c, mais essayez de vous référer à la
std
espace de noms. Ce n'est pas correct. Inclure<ctime>
au lieu de cela, de sorte queclock
sera enstd
.Un coup d'œil, votre code semble correct. Vérifiez qui est en fait le code que vous êtes de compiler et d'obtenir les erreurs de. Voici une version simplifiée de cette fonction qui compile des beaux - http://coliru.stacked-crooked.com/a/664f568053103f32
Stylewise, je ne recommanderais pas de mélange
<cXXX>
et<XXX.h>
en-têtes. Choisissez-en un.Créer un mcve. De préférence un seul fichier qui contient
main
et reproduit l'erreur de construction. Ensuite l'afficher dans votre question.OriginalL'auteur eerorika
Résolu!
Le problème, c'est le projet de l'utilisation enet bibliothèque, et a le temps.h, changement de nom du fichier à enet_time.h la génération de l'excellent travail (C'est temporaire, je pense que c'est mieux en utilisant les espaces de noms).
Merci à tous et désolé pour les inconvénients, je en savoir plus de l'enveloppement des bibliothèques C en C++ merci pour toutes les réponses.
Une salutation
OriginalL'auteur Ahri Love Dev
En C++, vous devez utiliser le "c" préfixe sur tous vos C-bibliothèque
#include
s.Donc
#include <time.h>
devrait devenir:#include <ctime>
.Mais notez que lorsque vous utilisez
#include <ctime>
tout dans les temps.h sera présent dans lastd
espace de noms.Donc
clock()
doit devenirstd::clock()
.Pour plus d'infos, voir: http://www.parashift.com/c++-faq/include-c-hdrs-system.html
OriginalL'auteur Jonathan Mee