sncf71
Messages postés5Date d'inscriptionmardi 21 septembre 2004StatutMembreDernière intervention16 septembre 2015
-
Modifié par cptpingu le 23/01/2015 à 20:09
sncf71
Messages postés5Date d'inscriptionmardi 21 septembre 2004StatutMembreDernière intervention16 septembre 2015
-
23 janv. 2015 à 23:35
Bonjour à tous.
J'ai un problème quand j'essai de passer un tableau de structures par adresse à une fonction :
struct {
CString MT;
CString marque;
}T;
const int NB = 500;
T tabfin[NB];
Le prototype de la fonction dans la classe vue est :
void supprimedoublons1(struct T (*p)[NB],int v);
Je declare p de cette façon :
T (*p)[NB];
p=&tabfin;
et j'essaie de passer le tableau tabfin précédent à la fonction comme ceci :
void CAlgebredeboolView::supprimedoublons1(T (*p)[NB],int uu){
for (int i = 0; i <= uu + 1; i++){
for (int j = i + 1; j <= uu + 1; j++){
TRACE(_T("mt1=%s mt2=%s\n"), p[i]->MT, p[j]->MT);
if (p[i]->MT.Compare(p[j]->MT) == 0 {
for (int k = j; k <= uu+ 1; k++){
p[k]->MT = p[k + 1]->MT;
p[k]->marque = p[k + 1]->marque;
}
j = j - 1;
p[uu]->MT = _T("");
p[uu]->marque = _T("");
uu = uu - 1;
}
if (p[i]->MT.Compare(p[j]->MT) != 0){
}
/*on ne fait rien dans ce cas*/
}
}
co1 = uu;
}
Voila merci de votre aide
Edit admin: Coloration syntaxique.
A voir également:
Passage tableau de structures par adresse sous vs 2013
Pourrais-tu reformuler ton problème, ce n'est pas très clair :(.
En attendant, je vais pointer quelques points perfectibles dans ton code:
- En C++, une structure et une classe, c'est la même chose (à part le niveau de visibilité par défaut). Donc il n'est pas nécessaire d'indiquer "struct" en argument d'une déclaration de fonction.
- En C++ la déclaration de ta struct serait la suivante:
struct T
{
std::string mt;
std::string marque;
};
- Je ne comprends pas la déclaration suivante: T (*p)[NB], un tableau de "T" devrait être T p[NB] ("p" est alors déjà un pointeur vu qu'un tableau est un pointeur).
- En C++ on évite les anciennes constructions du C. Donc pour un tableau à taille variable, on préfère un std::vector<T> (dont on peut forcer une taille via .resize(NB) si nécessaire), pour un tableau à taille fixe, un std::array<T, NB>.
- "j = j - 1" pourrait s'écrire plu succinctement en "--j" (pareil pour les autres cas identiques).
Pour supprimer des doublons d'un tableau, on préfère généralement la méthode suivante:
- Utilisation d'un std::vector
- tri via std::sort
- dédoublonnage via std::unique
sncf71
Messages postés5Date d'inscriptionmardi 21 septembre 2004StatutMembreDernière intervention16 septembre 2015 23 janv. 2015 à 23:35
Bonsoir ,
Merci pour ton aide je vais essayer d'améliorer mes connaissances en utilisant et appliquant ce que tu proposes. J'ai réussi à améliorer les choses en effet j'ai transformé le fameux T (*p)[] en T p[] qui fonctionne mieux effectivement . Bonne soirée. Merci encore .