Time() compile avec g++ mais pas avec code blocks (windows) [Résolu]

Signaler
Messages postés
35
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
4 novembre 2010
-
Messages postés
35
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
4 novembre 2010
-
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

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
120
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
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
120
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
Messages postés
35
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
4 novembre 2010

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 ?
Messages postés
35
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
4 novembre 2010

\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 ???
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
120
Ç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
Messages postés
35
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
4 novembre 2010

Ok dac, c'est pas grave, problème résolu ^^

Merci !