Initialisation de structure

goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008 - 12 nov. 2004 à 18:43
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008 - 15 nov. 2004 à 23:00
Salut,

J'ai une structure temps:
struct temps 
{
float time, elapsedTime, lastTime;
};


Je l'itinialise :
struct temps Time[2];


Donc ici, on pourras mettre Time[1] et Time[2].

Mais j'aimerais ne pas avoir à définir un nombre au départ car à l'initialisation je ne sais pas combien de structures temps j'aurai besoin.

Si je fais ça c'est bon ??? :
struct temps Time[];

82 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 nov. 2004 à 19:15
struct temps Time[2];

alors index maxi sera 1 et non 2.

si tu ne sais pas le nbr max alors alloc dynamique par malloc par exemple.

ciao...
BruNews, MVP VC++
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
12 nov. 2004 à 19:17
encore toi ? ;)

bon la je vois qu'on est exactement sur le meme pb.
perso j'ai fait 50 struct persos, 1000 struct batiments, 50 struct armes,....
ca marche mais il est édident que c'est loin d'etre optimisé ;)

je sé pas si ca marche mais vaudrait mieux faire un typedef devant ta def de struct, puis temps * Time;
la fudra allouer ta mem a chaque création d'un timer (dis c'est vraiment un timer que tu veux faire? je doute ;) )
Et ne pas oublier de 'freeer' la mem aussi... si toutefois c'est correct comme méthode :)
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
12 nov. 2004 à 19:18
ouah ben brunews a répondu en meme tps que moi ;)
c'est juste ce que j'ai dit?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
12 nov. 2004 à 19:28
Tient j'ai une question. Personnellement, je n'utilise que des classes. Point de vue optimisation, est-ce plus lent qu'une struct ?
Evidemment puisqu'il y a l'appelle du constructeur etc ... mais a part ca, l'acces au donné est le meme ?
Car je trouve la classe bien plus pratique que la struct, notament pour l'initialisation des données.
0

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

Posez votre question
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
12 nov. 2004 à 19:31
heu...c'et quoi la différence entre class et struct a part que pour class ya tout en public par éfaut?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 nov. 2004 à 19:45
serait pas le contraire, class tout private par defaut ?

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 nov. 2004 à 19:52
En effet tout en private dans une classe. Et puis la différence c'est que la classe n'existe pas en C.
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
12 nov. 2004 à 20:03
Bizarre...

J'ai fais :
struct temps Time[2];

et j'utilise :
Time.lastTime[1]
et
Time.lastTime[2]
et ça marche ... pas de bugs.

Comment ça se fait ???

Ok je vais voir pour l'alloc dynamique.
Merci
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
12 nov. 2004 à 20:14
En c++ il n'y a pas de structure, le mot clé struct désigne une classe dont l'accés aux attributs et l'héritage sont par défaut publique.

struct temps Time[2]; ce n'est pas une initialisation mais une instanciation.

Pour unitialiser une structure en C :

struct temps t = { 0.f, 0.f, 0.f };

la norme C99 autorise également
struct temps t {.lastTime 0.f };
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 nov. 2004 à 20:35
Time[1].lastTime et non Time.lastTime[1]
De plus si tu a acces a Time[0] et Time[1] (2 elements) et pas Time[2]
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
12 nov. 2004 à 20:54
Excuse moi je me suis trompé, j'ai en effet mis :
Time[1].lastTime et Time[2].lastTime

Par contre je n'arrive pas à faire une alloc dynamique avec ça...

Pouvez vous m'aider SVP ???
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
12 nov. 2004 à 20:54
vi j'mai planté ;)
mais si on fait temps *Time, comment on accede aux différents Time, avec Time[0],Time[1],... (apres avoir alloué la mem?)?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 nov. 2004 à 20:57
int n = 100;
struct temps* Time= malloc(n * sizeof *Time);

Ensuite accès Time[0], Time[1]...
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
12 nov. 2004 à 21:02
n doit être de type size_t, la fonction malloc prend un size_t en paramètre pour la taille en byte.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 nov. 2004 à 21:07
La conversion de int en size_t est vite vue, il n'y a pas de perte de donnée.
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
12 nov. 2004 à 21:09
J'ai fais ça :

int nb_ennemies;
struct temps* Time = malloc(nb_ennemies * sizeof *Time);

et ça me met cette erreur:
cannot convert from 'void *' to 'struct temps *
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 nov. 2004 à 21:10
mets un cast

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 nov. 2004 à 21:11
Compile en C, ou bien fait un cast explicite:
struct temps* Time = (struct temps*)malloc(nb_ennemies * sizeof *Time);
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 nov. 2004 à 21:13
Il n'y a pas d'erreur (et il ne faut pas de cast), en principe on compile du C avec un compilateur C.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 nov. 2004 à 21:14
pour le size_t, autant toujours utiliser ce type pour les taille, pour etre tranquille
0
Rejoignez-nous