PB C++
Fermé
David
-
26 août 2004 à 15:49
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 27 août 2004 à 09:01
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 27 août 2004 à 09:01
14 réponses
JSS
Messages postés
3745
Date d'inscription
jeudi 22 avril 2004
Statut
Contributeur
Dernière intervention
17 décembre 2004
31
26 août 2004 à 16:07
26 août 2004 à 16:07
salut,
yes vas y envoie le code on t'aidera si on peut ...
bon courage
JSS
yes vas y envoie le code on t'aidera si on peut ...
bon courage
JSS
JSS
Messages postés
3745
Date d'inscription
jeudi 22 avril 2004
Statut
Contributeur
Dernière intervention
17 décembre 2004
31
>
David
26 août 2004 à 16:14
26 août 2004 à 16:14
D'apres mes lointains souvenirs ....
essaie ca ...
mais je suis pas tres tres sur ...
typedef struct _cases{
int x;
int y;
int f;
int g;
int h;
struct _cases * pere;
} cases;
JSS
essaie ca ...
mais je suis pas tres tres sur ...
typedef struct _cases{
int x;
int y;
int f;
int g;
int h;
struct _cases * pere;
} cases;
JSS
Je ne pense pas que ce soit possible parce que pointer sur une structure qui n'est pas complètement définie engendera beaucoup de problèmes au compilo.
JSS
Messages postés
3745
Date d'inscription
jeudi 22 avril 2004
Statut
Contributeur
Dernière intervention
17 décembre 2004
31
>
david
26 août 2004 à 16:18
26 août 2004 à 16:18
moi je ne pense pas qu'il faille 2 structures
http://www.commentcamarche.net/forum/affich-964261-PB-C#6
JSS
http://www.commentcamarche.net/forum/affich-964261-PB-C#6
JSS
Le titre est un peu mal choisi car les structures ne sont pas une spécificité du C++. J'aurai proposé "Pb struct C/C++".
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
JSS
Messages postés
3745
Date d'inscription
jeudi 22 avril 2004
Statut
Contributeur
Dernière intervention
17 décembre 2004
31
26 août 2004 à 16:29
26 août 2004 à 16:29
lol ....
c'est bon david ?
JSS
c'est bon david ?
JSS
oui grand merci en fait c'est le post 6 qui fonctionne meme si il y a quelques erreurs de recopiage le principal y est
JSS
Messages postés
3745
Date d'inscription
jeudi 22 avril 2004
Statut
Contributeur
Dernière intervention
17 décembre 2004
31
26 août 2004 à 16:36
26 août 2004 à 16:36
de rien
Bonne journée !
JSS
Bonne journée !
JSS
Hello !
Pour utiliser un pointeur sur un type de classe ou de structure, le compilateur a besoin de la déclaration seulement. Il se moque de connaître la définition car il n'en n'a simplement pas besoin. Il exige la définition d'un type lorsqu'il a besoin de connaître sa taille par exemple. Un pointeur sur tout type étant de taille fixe, il suffit juste de la déclaration.
Considérons le programme suivant :
class toto;
int main()
{
toto* P = (toto*) 1;
return int(P);
}
Ce programme compile, est linké et produit un exécutable qui fonctionne parfaitement alors que la classe est définie nulle part !!!!!!!
Bien. Cela étant plus clair, répondons au problème de David :
struct cases{
int x;
int y;
int f;
int g;
int h;
// ici je souhaiterais ajouter un pointeur vers "pere" du type cases
};
problème :
struct cases
{
int x;
int y;
int f;
int g;
int h;
// ici je souhaiterais ajouter un pointeur vers "pere" du type cases
cases* Lien;
};
solution :
Il suffit d'utiliser directement cases* dans la définition du type, le nom étant déjà déclaré.
Exemple de programme :
int main()
{
cases C1 = { 1, 2, 3, 4, 5, (cases*) 7 };
cases C2 = { 2, 3, 4, 5, 6, &C1 };
return int(C2.Lien = C2.Lien->Lien);
}
Question :
Que retourne ce porgramme ?
Take care !
Pour utiliser un pointeur sur un type de classe ou de structure, le compilateur a besoin de la déclaration seulement. Il se moque de connaître la définition car il n'en n'a simplement pas besoin. Il exige la définition d'un type lorsqu'il a besoin de connaître sa taille par exemple. Un pointeur sur tout type étant de taille fixe, il suffit juste de la déclaration.
Considérons le programme suivant :
class toto;
int main()
{
toto* P = (toto*) 1;
return int(P);
}
Ce programme compile, est linké et produit un exécutable qui fonctionne parfaitement alors que la classe est définie nulle part !!!!!!!
Bien. Cela étant plus clair, répondons au problème de David :
struct cases{
int x;
int y;
int f;
int g;
int h;
// ici je souhaiterais ajouter un pointeur vers "pere" du type cases
};
problème :
struct cases
{
int x;
int y;
int f;
int g;
int h;
// ici je souhaiterais ajouter un pointeur vers "pere" du type cases
cases* Lien;
};
solution :
Il suffit d'utiliser directement cases* dans la définition du type, le nom étant déjà déclaré.
Exemple de programme :
int main()
{
cases C1 = { 1, 2, 3, 4, 5, (cases*) 7 };
cases C2 = { 2, 3, 4, 5, 6, &C1 };
return int(C2.Lien = C2.Lien->Lien);
}
Question :
Que retourne ce porgramme ?
Take care !
Errata :
1) Il n'en a simplement pas...
2) Programme complet :
struct cases
{
int x;
int y;
int f;
int g;
int h;
// lien de David :
cases* Lien;
};
int main()
{
cases C1 = { 1, 2, 3, 4, 5, (cases*) 7 };
cases C2 = { 2, 3, 4, 5, 6, &C1 };
return int(C2.Lien = C2.Lien->Lien);
}
1) Il n'en a simplement pas...
2) Programme complet :
struct cases
{
int x;
int y;
int f;
int g;
int h;
// lien de David :
cases* Lien;
};
int main()
{
cases C1 = { 1, 2, 3, 4, 5, (cases*) 7 };
cases C2 = { 2, 3, 4, 5, 6, &C1 };
return int(C2.Lien = C2.Lien->Lien);
}
Maintenant que ces histoires de déclarations sont parfaitement claires pour tout le monde, que retourne le programme suivant ?
#include <iostream>
using namespace std;
template<class T>
struct cases
{
int x;
int y;
int f;
int g;
int h;
// lien de David :
cases<int*>* Lien;
};
int main()
{
cases<int*> C1 = { 1, 2, 3, 4, 5, (cases<int*>*) &C1 };
cases<void*> C2 = { 2, 3, 4, 5, 6, &C1 };
cout << static_cast<void*>(C2.Lien = C2.Lien->Lien) << endl;
return 0;
}
(Ne trichez pas, juste en lisant le source !)
#include <iostream>
using namespace std;
template<class T>
struct cases
{
int x;
int y;
int f;
int g;
int h;
// lien de David :
cases<int*>* Lien;
};
int main()
{
cases<int*> C1 = { 1, 2, 3, 4, 5, (cases<int*>*) &C1 };
cases<void*> C2 = { 2, 3, 4, 5, 6, &C1 };
cout << static_cast<void*>(C2.Lien = C2.Lien->Lien) << endl;
return 0;
}
(Ne trichez pas, juste en lisant le source !)
Char Snipeur
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
27 août 2004 à 09:01
27 août 2004 à 09:01
En fait tu fait une une liste chainerinfinie sur elle même pour C1.
Enfin, je rapel à Guki que dans une structure, on rapel le type pour un constructeur, et cela ne pose pas de problème.
Salutation !
Char Snipeur
Enfin, je rapel à Guki que dans une structure, on rapel le type pour un constructeur, et cela ne pose pas de problème.
Salutation !
Char Snipeur