L'initialisation static struct tm dans une classe
Je voudrais utiliser la struct tm comme une variable static dans une classe. Passé une journée entière à la lecture et de l'essayer, mais il ne peut toujours pas 🙁 apprécierais si quelqu'un peut ce que je faisais de mal
Dans ma classe, dans le Public, j'ai déclaré que:
static struct tm *dataTime;
Dans le main.cpp j'ai essayé de la définir et de l'initialiser avec système temporairement pour tester (le temps réel pour être saisi au moment de l'exécution)
time_t rawTime;
time ( &rawTime );
tm Indice::dataTime = localtime(&rawTime);
mais il semble que je ne puisse pas utiliser time() en dehors des fonctions.
principal.rpc:28: erreur: attendu
constructeur, destructeur, ou de type
la conversion avant ‘(’ token
Comment initialiser les valeurs statique tm d'une classe?
tm*
ou un tm
?Il vaut mieux ne pas être
tm*
, parce que localtime
retourne une instance statique.OriginalL'auteur eruina | 2010-01-20
Vous devez vous connecter pour publier un commentaire.
Vous pouvez l'envelopper dans une fonction:
Pour éviter une possible liaison des problèmes, à prendre la fonction statique ou le mettre dans un sans nom d'espace de noms.
Merci, a changé. Peut-être que je vais mémoriser la plupart du C++ termes un jour...
Heh, il y a de trop. Je suis juste stupide, anonyme et sans nom, qui signifie la même chose, mais pas selon la norme. 😐 Idiot comité.
OriginalL'auteur Georg Fritzsche
OriginalL'auteur Chris Jester-Young
Envelopper le tout dans une fonction, et l'utiliser pour initialiser votre membre statique:
Et vous n'avez pas besoin de (et donc ne devrait pas) préfixe struct utilisation avec
struct
en C++:tm
est assez, pas destruct tm
nécessaire.OriginalL'auteur Konrad Rudolph
Vous ne pouvez pas appeler des fonctions arbitrairement en dehors des fonctions. Soit effectuer l'initialisation de votre
main()
fonction, ou de créer une classe wrapper autour de latm
struct avec un constructeur qui ne l'initialisation.OriginalL'auteur Thomas
Notez également que votre
struct tm
est un pointeur vers une struct tm. Le retour de localtime est un singleton pointeur dont le contenu va changer lorsque vous ou quelqu'un d'autre appelle localtime de nouveau.localtime
retourne une instance statique. Donc, ce n'est pas thread-safe ou rentrante. Il y a aussilocaltime_r
pour plus de robustesse.Ma réponse légèrement compense en copiant son contenu tout de suite, mais tout n'est pas "thread-safe" par tous les moyens.
Je ne savais pas que. Mise à jour, merci. Ce qu'un dingo motif.
OriginalL'auteur Ben Zotto
Ajouter ceci:
Lorsque le fichier objet est initialisé au moment de l'exécution, le constructeur de l'Initialiseur() est appelé, ce qui définit alors la "global" variable datetime comme vous le souhaitez. Notez que l'anonyme de l'espace de noms de la construction permet d'éviter d'éventuels affrontements pour les noms d'Initialiseur et myinit.
OriginalL'auteur Antti Huima