pb de classe qui contient un pointeur vers une autre et inversement...

pb de classe qui contient un pointeur vers une autre et inversement... - C++ - Programmation

Marsh Posté le 10-09-2003 à 22:44:04    

Code :
  1. #define TabString List<string>
  2. class Channel
  3. {
  4. string _modes;
  5. string _topic;
  6. TabString _banlist;
  7. List<UserRight*> _users;
  8. };
  9. class User
  10. {
  11. string _nick;
  12. string _maskname;
  13. string _maskhost;
  14. string _modes;
  15. bool _admin;
  16. List<UserRight*> _channels;
  17. };
  18. class UserRight
  19. {
  20. unsigned char Level;
  21. Channel* Chan;
  22. User* User;
  23. };


 
List<T> est un template qui permet de faire une liste de type T que j'ai codé (vu que j'ai pas encore compris le principe de la stl)
 
Y a-t-il une possibilité pour que je m'en sorte ?
 
cela représente le contenu d'un serveur irc : plusieurs canaux (Channel) et plusieurs utilisateurs (User). Un utilisateur est relié à un canal par les droits qu'il a dessus.


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 10-09-2003 à 22:44:04   

Reply

Marsh Posté le 10-09-2003 à 22:52:33    

Les typedef c pas fait pour les chiens :o
les forward declaration aussi :o
 

Code :
  1. class UserRight;
  2. typedef List<string>  TabString;
  3. class Channel
  4. {
  5. string _modes;
  6. string _topic;
  7. TabString _banlist;
  8. List<UserRight*> _users;
  9. };
  10. class User
  11. {
  12. string _nick;
  13. string _maskname;
  14. string _maskhost;
  15. string _modes;
  16. bool _admin;
  17. List<UserRight*> _channels;
  18. };
  19. class UserRight
  20. {
  21. unsigned char Level;
  22. Channel* Chan;
  23. User* User;
  24. };


Reply

Marsh Posté le 10-09-2003 à 22:57:50    

pour le typedef, c vrai je suis un âne...
merci pour le forward declaration, je ne connaissais pas :)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 11-09-2003 à 00:03:54    

Citation :


List<T> est un template qui permet de faire une liste de type T que j'ai codé (vu que j'ai pas encore compris le principe de la stl)


Pkoi t'utilises pas la STL ? Qu'est-ce qui t'a posé pb ?


Message édité par Enidan le 11-09-2003 à 00:07:45
Reply

Marsh Posté le 11-09-2003 à 09:45:08    

BlackGoddess a écrit :

pour le typedef, c vrai je suis un âne...
merci pour le forward declaration, je ne connaissais pas :)


 
C un bon truc, plutot que de faire le include dans le .h tu fais un  
 
class roger;
 
 
et tu fais l'include dans le .cpp
ca peut aider au niveau des tps de compil

Reply

Marsh Posté le 11-09-2003 à 09:49:00    

chrisbk a écrit :


 
C un bon truc, plutot que de faire le include dans le .h tu fais un  
 
class roger;
 
 
et tu fais l'include dans le .cpp
ca peut aider au niveau des tps de compil


 
Attention cependant ça ne marche que si l'ont a un pointeur ou une référence à un objet de type roger. Ce qui colle parfaitement à ce qui est demmandé ici ;)


Message édité par LetoII le 11-09-2003 à 09:49:38

---------------
Le Tyran
Reply

Marsh Posté le 11-09-2003 à 09:50:37    

LetoII a écrit :


 
Attention cependant ça ne marche que si l'ont a un pointeur ou une référence à un objet de type roger. Ce qui colle parfaitement à ce qui est demmandé ici ;)


 
Tootafay, sinon le compilo mugit

Reply

Marsh Posté le 11-09-2003 à 17:53:12    

Enidan a écrit :

Pkoi t'utilises pas la STL ? Qu'est-ce qui t'a posé pb ?


 
bin ... je comprends pas le concept d'iterator, de vector ... j'ai commencé a lire la doc et j'ai abandonné parce que je ne comprenais plus rien ...


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 11-09-2003 à 18:02:04    

en tres gros :
 
vector:tableau dynamiqu de donnée (eg il s'adapte au nombre de donnée contenue) Note que la stl propose +eurs container de ce genre, il faut choisir soigneusement le bon en fonction des besoins. (et utiliser reserve() avec les vecteur)
 
iterateur : permettent de parcourir un des containers sus-nommé

Reply

Marsh Posté le 11-09-2003 à 18:07:56    

me voila quelque peu éclairé, merci :) je vais me replonger dans la doc alors :)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 11-09-2003 à 18:07:56   

Reply

Marsh Posté le 11-09-2003 à 18:12:04    

pour une utilisation rapide de la chose :
 
 

Code :
  1. #include <vector>
  2. ...
  3. std::vector<int> toto;
  4. toto.push_back(5); //ajoute 5
  5. toto.push_back(2); //ajoute 2
  6. int r = toto[0];//r sera egal a 5


 
Maintenant si tu parcours tout ton tableau, utiliser un iterateur sera plus fin. Comment que ca marche ?
 

Code :
  1. std::vector<int>::iterator it,end;
  2. end = toto.end();
  3. it = toto.begin();
  4. while(it != end)
  5. {
  6. int r=*it;
  7. ++it;
  8. }


 
Vala. Fouille la stl, tu trouveras vector, deque, list, stack qui fonctionnent plus ou moins toute sur le meme principe (le tout etant de choisir la structure approprié. Par exemple si tu ajoute frequemment des elements a ta structure, vector ne sera pas du tout conseillé)
 
 

Reply

Marsh Posté le 11-09-2003 à 18:39:20    

Code :
  1. while(it != toto.end())
  2. {
  3. int r=*it; 
  4. ++it;
  5. }


 
C'est pas plustot comme ça ? ( toto.end() )

Reply

Marsh Posté le 11-09-2003 à 18:40:44    

Kristoph a écrit :

Code :
  1. while(it != toto.end())
  2. {
  3. int r=*it; 
  4. ++it;
  5. }


 
C'est pas plustot comme ça ? ( toto.end() )


 
end = toto.end(), on s'y retrouve (et vu que j'ajoute/enleve rien...)

Reply

Marsh Posté le 11-09-2003 à 18:46:03    

ah bien :) ca fonctionne en multithread ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 11-09-2003 à 18:50:05    

ben j'imagine que comme pour tout, si tu penses acceder simultanement au meme vecteur par deux threads pour faire autre chose que de la lecture te faudra mettre les synchro habituelles....

Reply

Marsh Posté le 11-09-2003 à 19:00:55    

BlackGoddess a écrit :

ah bien :) ca fonctionne en multithread ?


 
Telle que la STL est définie, la seule garantie que tu as en multithread est si les différents threads accèdent à différents conteneurs.
 
Certaines implémentations de la STL te permetent de partager un conteneur en lecture seule mais c'est le maximum que tu peux esperer.

Reply

Marsh Posté le 11-09-2003 à 19:05:58    

Kristoph a écrit :


 
Telle que la STL est définie, la seule garantie que tu as en multithread est si les différents threads accèdent à différents conteneurs.
 
Certaines implémentations de la STL te permetent de partager un conteneur en lecture seule mais c'est le maximum que tu peux esperer.

à vérifier aussi l'allocateur :  SGI en propose plusieurs sortes

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed