Time() compile avec g++ mais pas avec code blocks (windows)

Résolu
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010 - 4 nov. 2010 à 14:01
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010 - 4 nov. 2010 à 17:28
Bonjour tout le monde, j'ai fait une classe en C++ qui utilise les fonction srand et time pour générer un nombre aléatoire dans une des méthodes de la classe.

Je l'ai codé sous linux d'abord avec gedit simplement, puis je l'ai compilé avec g++ et la compilation fonction parfaitement, et le programme fonctionne à merveille.

Cependant, j'ai voulu la reutiliser sous windows avec code::blocks, mais la le compilateur me renvoie un "error: 'time' was not declared in this scope".

voici la partie du code concernée :
#include "Jeu.h"
#include
#include <vector>
#include <cstdlib>
using namespace std;

Jeu::Jeu() // Constructeur par defaut
{
srand(time(NULL));
}

j'utilise rand() un peu plus loin qui lui ne génère pas d'erreur car il fonctionne lorsque je met la ligne "srand(time(NULL))" en commentaire.

Je me suis dit que c'était une erreur dans les include, mais je ne pense pas puisqu'il marche sous linux et que même sous windows code::blocks ne fait pas d'erreur de compilation ni sur srand, ni sur rand ...

Quelqu'un pourrait il trouver d'où vient le problème ?

Merci d'avance :D

6 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 nov. 2010 à 17:12
J'avais oublié :p
#include <ctime>

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 nov. 2010 à 16:47
Plusieurs remarques:
- Évite les using namespace std, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- Préfère 0 à NULL en C++, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/null-en-cpp
- srand ne doit être appelé qu'une seule et unique fois dans tout le programme. C'est donc étrange de le mettre dans un constructeur. Généralement, on le met juste en dessous du main().

Fait le test suivant, compile ceci sous code::block:
#include <cstdlib>

int main()
{
  srand(time(0));
  return 0;
} 


Si ça fonctionne, ton erreur doit être induite par quelque chose d'autre.
Sous Linux, as-tu bien pensé à compiler avec tous les flags ? (Si tu oublies des warnings, tu peux potentiellement passer à côté de problème de portabilité).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
4 nov. 2010 à 17:06
J'ai testé ton code pour voir, seul et sans classes juste un main.cpp et ça ne compile pas !!!, et pour la portabilité je pense que c'est bon puisque sans l'utilisation du srand(time(0)), le code fonctionne parfaitement sous linux ET sous windows ... (se qui veux aussi dire que cela ne vient pas d'un conflit de namespace)

Donc d'après le test de ton code c'est le "time" qui ne veut pas fonctionner puisque j'ai le droit au même message d'erreur (error: 'time' was not declared in this scope)

J'ai l'impression que ca vient de code::blocks lui même ...

Une idée ?
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
4 nov. 2010 à 17:19
\o/ c'est bon, c'était donc un problème d'include, il fallait mettre <cstdlib> ET <ctime>, ma classe fonctionne maintenant, merci :)

Par contre je comprend pas pourquoi sous linux ça c'est compilé correctement alors qu'il manque un include ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 nov. 2010 à 17:26
Ça ne compile pas chez moi (sous Linux) :)
Peut être que l'un des tes includes incluait indirectement ctime. Je n'ai pas la réponse à cette question en tout cas.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
4 nov. 2010 à 17:28
Ok dac, c'est pas grave, problème résolu ^^

Merci !
0
Rejoignez-nous