Passage par adresse d'un tableau de structure [Newbie] - Programmation
Marsh Posté le 09-01-2002 à 17:55:42
Pour utiliser ton tableau dans ta fonction Gestion() et pour accéder aux variables, voilà comment il faut faire:
int Gestion(building* pointeur)
{
//Par exemple
int e, i;
e = pointeur[x]->E;
i = pointeur[x]->I;
return 0;
}
Marsh Posté le 09-01-2002 à 17:56:25
Pour écrire dans la tableau c'est pareil:
pointeur[x]->E = cequetuveux;
pointeur[x]->I = cequetuceux;
Marsh Posté le 09-01-2002 à 18:08:04
Peut-être que ce qu'il voulait dire, c'est qu'il veut passer son tableau en argument...
int Gestion(building *bob)
{
for (int i =0; i<=25;i++)
{
bob++;
bob->asdasdasd
}
return 0;
}
chuis pas sur...
Marsh Posté le 09-01-2002 à 18:16:46
Merci bcp pour les réponses !
Et dans la déclaration de ma fonction Gestion(...), je marque quoi à la place des "..." ?
Merci d'avance !
J'essaye ça tout de suite ...
A+, Nrv ;-)
Marsh Posté le 09-01-2002 à 18:23:06
Question stupide de ma part que la précédente ;
à l'appel, ça donne quoi je voulais dire ;-)
qq c du genre :
Gestion(int entier, &appels);
??
A+, Nrv ;-)
Marsh Posté le 09-01-2002 à 18:34:55
Ca a l'air de passer comme ci-dessus.
Par contre, je veux now plus compliqué :-) :
Maintenant que j'ai mon "appels[25]", je veux l'appeler de Gestion :
Gestion(&appels);
Qui alors cascade le traitement :
[Dans Gestion.cpp] :
appels[12]->I = 5 ;
Gestion2(Building* appels);
J'ai le droit de cascader les passages par adresse comme ça ?
A+, Nrv ;-)
Marsh Posté le 09-01-2002 à 19:47:46
Tu pourrais expliquer exactement ce que tu veux faire, parce que je comprends pas ce qu'est ta fonction Gestion2().
Marsh Posté le 09-01-2002 à 19:53:31
Ce que je veux faire ... ça fait un rien compliqué à expliquer, c'est dans le cadre d'un projet d'info à rendre ... lundi.
Je ne peux t'expliquer le tout dans son ensemble, tu t'en doutes ; cela dit, à un moment donnée, je suis obligé de découper mes fonctions en morceaux (trop grosses, pas à mes yeux mais à ceux du prof).
Aussi, je doit "sous traiter" certaines actions à des sous-fonctions, etc.
Dans le cas courant, il me manque la syntaxe qui va bien pour faire :
[Main()]
building appels[25]
gestion(&appels);
[Gestion.cpp]
gestion2(building* appels[]);
Cette syntaxe est fausse : le deuxième passage par adresse est buggé jusqu'à l'os ;-) j'arrive pas à voir comment faire ...
Voili voilà, en espérant ne pas avoir trop éludé ta question ...
Ce qui est sûr, c'est que je n'ai pas le choix ;-)
A+, Nrv ;-)
[edtdd]--Message édité par nrv_from_cnr--[/edtdd]
Marsh Posté le 09-01-2002 à 20:20:32
Code :
|
deux exemple pour acceder au tableau de deux manieres diff
Alload:
Code :
|
ca marchera jamais puisque le tab n'est pas un tableau de pointeur.
[edtdd]--Message édité par deathsharp--[/edtdd]
Marsh Posté le 09-01-2002 à 20:35:02
Avant tout, merci bcp pour ton implication.
Ca fait vraiment plaisir de voir que l'on peut être aidé !
Cela dit c'est encore un peu différent ; je m'explique.
Si je reprends ton formalisme, ce que je cherche à faire c'est appeler gestion_disp() à partir de Gestion().
void Gestion( unsigned int count, building tab[] )
{
for( int i=0; i<count; i++ ) {
tab[i].E = i;
tab[i].I = i*2;
}
Gestion_disp(size, [???] );
}
Et ce que je ne n'arrive pas à trouver, c'est que mettre à la place de " [???] " pour que l'on ai un passage par adresse de "tab" appartenant à Gestion(), dans Gestion_disp().
En effet, ma fonction "Gestion_disp()" (si je puis dire) agis et modifie "tab" ; il ne s'agirai pas, une fois "gestion_disp" quittée et de retour dans "gestion()", qu'aucune des modifs apportées ne soient sauvegardées !
Merci encore pour le temps que tu as pris pour me rendre service ...
Une dernière question donc ;-) : je met quoi à la place de [???] ?
D'avance merci et j'arrête de t'embêter ...
C'est déjà abusé je trouve ...
A+, Nrv ;-)
Marsh Posté le 09-01-2002 à 21:03:21
tu remplace le machin par tab
tab c l'address du tableau.
tu peux la repasser et sa pointera tjrs sur le tableau.
par contre ne la modifie pas dans Gestion avec ++ par ex sinon ca va pointer sur un autre element que le premier.
j'espere t'avoir aider
et pi t'inquete pas t'embete pas: si tu m'embeterrai je t'aurai pas repondu
et puis j'aime bien rendre service quand c demander gentillement
hesite pas
Marsh Posté le 09-01-2002 à 21:11:08
deathsharp > si on a un pointeur vers un tableau de données, on peut se rendre à chaque élément du tableau en utilisant pointeur++, pointeur--, etc... ?
Marsh Posté le 09-01-2002 à 21:12:07
sauf erreur oui
Marsh Posté le 09-01-2002 à 21:17:34
Cool alors Je savais pas. Merci.
Au fait, t'es en quelle classe nrv_from_cnr pour avoir à faire un sujet comme celui-ci?
Marsh Posté le 09-01-2002 à 21:18:37
juste fait gaffe avec ++ et -- si tu veux retrouver le debut apres...
tu fais une copie du pointeur a la limit
Marsh Posté le 09-01-2002 à 21:33:34
Belle philosophie, qui m'arrange en plus !
N'empêche c'est vraiment sympa !
Si tu m'as aidé : oui, j'ai appris plein de choses sur ce topic
See ya et merci encore !
A+, Nrv
Marsh Posté le 09-01-2002 à 21:43:28
PROGRAMME INTEGRALEMENT DEBUGGE ! ! ! !
En plus d'être le Dieu de la Patience deathsharp, tu es mon Dieu à moi ! !
A+ Nrv
Marsh Posté le 09-01-2002 à 21:59:17
en generale jsuis pas patient sauf dans ce ke j'aime bien: style la prog
par contre la queue a la banque en ce moment...
Marsh Posté le 09-01-2002 à 22:01:59
Moi c'est plutôt la queue à la Poste qui me tue !
Surtout qd on commence derrière les portes coulissantes
;-)
Nrv
Marsh Posté le 09-01-2002 à 22:06:10
AAARGHH !
Non c'est pas possible !
J'ai une autre mer _ _ , mais plus petite celle là ...
Dans mon App MFC Dialog Based, je déclare dans le "OnInitDialog()" mon tableau de struct ; j'y ai pas accès dans le OnPaint() ! C'est normal docteur ?
A+, Nrv ;-)
Marsh Posté le 09-01-2002 à 22:06:31
ben la poste c pareil
je crois que au lieu d'echanger mes francs v aller me trouver un maillot de hokey des Blackhawks
[edtdd]--Message édité par deathsharp--[/edtdd]
Marsh Posté le 09-01-2002 à 22:14:13
Oui c'est normal, parce que tu initialises localement ton tableau, et donc tu ne peux y accèder dans une autre fonction (OnPaint).
Initialise le globalement ou simplement dans la fonction WinMain().
[edtdd]--Message édité par Alload--[/edtdd]
Marsh Posté le 09-01-2002 à 22:18:30
Hé hé ...
C'est là que ça deviens rigolo (tu vas adorer , si j'ai bien compris ) ...
Le tableau n'est pas de taille fixe : c'est l'utilisateur qui choisi sa taille, par l'intermédiaire d'une autre boite de dialogue ;
elle est initialisée de la sorte : building* appels = new Builing[Taille];
Avec "Taille" choisie par l'utilisateur donc ;-)
Donc si j'ai bien compris, un tableau devant être de taille fixée, ... ???
Nrv ;-)
Marsh Posté le 09-01-2002 à 22:22:24
Si tu veux utiliser un tableau dynamique, tu peux utiliser les vecteurs déclaré dans vector.h.
Si tu connais pas:
_ déclarer ton vecteur: vector<building*> appels
_ ajouter un membre: appels.push_back(new building)
_ accéder à un membre: appels[i]->E ou appels[i]->I
Un vecteur est vierge lorsque que tu l'initialises.
Marsh Posté le 09-01-2002 à 22:22:58
Après tu peux utiliser des fonctions membres du vecteur:
resize, erase, etc... qui sont très pratiques.
Marsh Posté le 09-01-2002 à 22:24:33
mais tu peux tres bien garder ton tableau... ( jsuis pas un grand fana de la STL )
Marsh Posté le 09-01-2002 à 22:30:43
Bon ben ... ch'uis un peu obligé de passer en vector alors :-)
c'est ça
Ok initialisation globale alors ...
Et ... même syntaxe pour pour les tableaux, dans les passages par adresse
Y perd pas le Nord le Nrv
Marsh Posté le 09-01-2002 à 22:32:32
Remarque j'aurai pu faire un truc dégeu :
initialiser un tableau en global, de taille [la taille maxi admissible, càd 55]
Mais là, c'est vous 2 qui allaient faire un infarctus
A+, Nrv
[edtdd]--Message édité par nrv_from_cnr--[/edtdd]
Marsh Posté le 09-01-2002 à 22:34:08
Ben tu pourrais faire ça, ça prendra pas trop de mémoire en trop. Mais si c'est pour l'école, ça va pas le faire devant le prof
Sinon, moi j'aime bien les vecteurs, c'est extrèmement pratique je trouve.
Marsh Posté le 09-01-2002 à 22:35:57
g vue un OnPaint qq part... donc tu utilise MFC ( )
tu pourrais tres bien mettre
Code :
|
dans la definition de la classe, init a NULL dans le constructeur et puis faire une fonction qui alloue de la memoire. ( et bien deallocation dans destructeur )
[edtdd]--Message édité par deathsharp--[/edtdd]
Marsh Posté le 09-01-2002 à 22:37:03
C'est clair que ça à l'air puissant !
Un Pb toutefois : ça a pas l'air de marcher ... un #include "vector.h" Ok ;
En global : vector <Building*> appels ; //juste après déclaration de la structure Building
Message d'erreur : "missing storage-class or type specifiers"
Nrv ;-)
Marsh Posté le 09-01-2002 à 22:40:31
Ben l'initialisation du vecteur semble pas avoir d'erreur pourtant.
Marsh Posté le 09-01-2002 à 22:40:46
deathsharp : ta solution me plais ! Pas besoin de recorriger les 10 000 occurences dans mon Pg
Par contre, pour changer, je suis trop fort en C++
Mais si je définit "appels" dans la classe OnPaint, j'y aurai accès ailleurs, dans les autres fonctions ?!
Quand à la fonction qui alloue de la mémoire (malloc ? je sais plus moi Argh !)
Nrv
Marsh Posté le 09-01-2002 à 22:43:06
malloc -> pas bien en c++
utilise new a la place et delete
Marsh Posté le 09-01-2002 à 22:43:36
Pour allouer de la mémoire:
_ malloc c'est en C.
_ en C++ tu utilises new ou new[].
Marsh Posté le 09-01-2002 à 22:45:41
Marsh Posté le 09-01-2002 à 22:51:37
A 30 mois près pour moi
J'ai fait ça pas propre, et now je me rend compte que je vais avoir un peu de débugage en fait ;-)
Merci à vous 2 pour ces discutions très instructives !
A+, Nrv :-)
Marsh Posté le 09-01-2002 à 17:33:30
Coucou !
S'il vous plais ne me prenez pas pour plus fort que je ne suis : je suis assez mauvais en C++, je commence ...
J'ai la structure suivante :
struct building{
int E;
int I;
}
Je créée ensuite un tableau de cette structure :
building appels[25].
Dans une fonction "Gestion(...)", je veux avoir accès en lecture-écriture à ce tableau ; quelle syntaxe écrire dans la déclaration de Gestion(...) ?
A l'appel, qu'écrire ?
Put... ça me gonfle de bloquer sur des trucs aussi bateau ...
Svp aidez moi ça va pas vous prendre longtemps ;-)
A+, Nrv ;-)
[edtdd]--Message édité par nrv_from_cnr--[/edtdd]