Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2879 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++] class (newbie) [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] class (newbie) [résolu]

n°169436
the big be​n
Posté le 02-07-2002 à 09:34:00  profilanswer
 

Pourquoi cela ne fonctionne t il pas?
 
code:

Code :
  1. typedef char string[255];
  2. class decomp
  3. {
  4. private:
  5. const int nblg =10, nbcar = 255;
  6. char *ch = new char[nbcar*nblg];
  7. char tab[nbcar][nblg];
  8. public:
  9. decomp(string nom_fichier);
  10. void afficher();
  11. };


 
voici ma liste d erreur:
 error C2258: illegal pure syntax, must be '= 0'      //il parle de nblg
 error C2252: 'nblg' : pure specifier can only be specified for functions //il parle de nblg
 error C2258: illegal pure syntax, must be '= 0'    //il parle de nbcar
 error C2252: 'nbcar' : pure specifier can only be specified for functions //il parle de nbcar
 error C2258: illegal pure syntax, must be '= 0'    //il parle de ch
 error C2252: 'ch' : pure specifier can only be specified for functions  //il parle de ch
 error C2065: 'nbcar' : undeclared identifier
 ...
 
Ne peux t on pas déclarer de variable dans la partie private de ma class ou ca vien d autre part???
Si je met mon   const int nblg =10, nbcar = 255;  juste apres mon typedef il ne me fait pas les 4 premieres erreurs mais bon il me fait qd meme celles avec ch et mon tab !  
Comment puis je faire ???
 
D avance merci


Message édité par the big ben le 04-07-2002 à 10:36:11
mood
Publicité
Posté le 02-07-2002 à 09:34:00  profilanswer
 

n°169438
LetoII
Le dormeur doit se réveiller
Posté le 02-07-2002 à 09:35:40  profilanswer
 

Toi tu bosse avec Visual non?
 
Oublie les membre constant c mal géré.


---------------
Le Tyran
n°169444
LetoII
Le dormeur doit se réveiller
Posté le 02-07-2002 à 09:40:41  profilanswer
 

Si non la bonne sintaxe serait (en plus y a une erreur conceptuelle):
 
Dans le Header:

Code :
  1. class Decomp
  2. {
  3.    private:
  4.            static const int  nblg;
  5.            static const int  nbcar;
  6.            char              *ch;
  7.            char              *tab;
  8.    public:
  9.                 Decomp(string nom_fichier);
  10.                ~Decomp()
  11.            void afficher();
  12. };


 
Dans le cpp:

Code :
  1. const int  Decomp::nblg  = 10;
  2. const int  Decomp::nbcar = 255;
  3. Decomp::Decomp(string nom_fichier)
  4. {
  5.    ch = new char[nbchar*nblg];
  6.    tab = new char[nbchar*nblg];
  7.   //Ton code
  8. }
  9. Decomp::~Decomp()
  10. {
  11.    delete[] ch;
  12.    delete[] tabb;
  13. }


Message édité par LetoII le 02-07-2002 à 09:42:49

---------------
Le Tyran
n°169446
the big be​n
Posté le 02-07-2002 à 09:41:17  profilanswer
 

oui je travail en visual ...
Snif il n y a vraiment pas moyen ???  :(

n°169448
the big be​n
Posté le 02-07-2002 à 09:42:38  profilanswer
 

que signifie exactement le static ???

n°169449
LetoII
Le dormeur doit se réveiller
Posté le 02-07-2002 à 09:43:38  profilanswer
 

Ca défini un membre de classe. C'est à dire commun à toutes les instances de la classe.


Message édité par LetoII le 02-07-2002 à 09:43:50

---------------
Le Tyran
n°169453
the big be​n
Posté le 02-07-2002 à 09:45:29  profilanswer
 

Bon ok je vais essayer ca merci beaucoup ...

n°169457
LetoII
Le dormeur doit se réveiller
Posté le 02-07-2002 à 09:47:24  profilanswer
 

Essaye ce que je t'ai envoyé, c la syntaxe normale, mais je pense pas que ça marche sous visual.


---------------
Le Tyran
n°169548
the big be​n
Posté le 02-07-2002 à 11:00:59  profilanswer
 

Ca fonctionne sauf mon tableau car c est en fait un tableau a 2 dimension et non pas un pointeur vers un tableau que je veux de + c est un tab a 2 dimension comment dois je faire ??
 
mon code actuel:
 

Code :
  1. class decomp
  2. {
  3. private:
  4. static const int  nblg;
  5.     static const int  nbcar;
  6. char *ch ;
  7. char tab[nbcar][nblg];  //*** CE TABLEAU CI !! ****
  8. public:
  9. decomp(string nom_fichier);
  10. ~decomp();
  11. void afficher();
  12. };
  13. const int  decomp::nblg  = 10;
  14. const int  decomp::nbcar = 255;
  15. decomp::decomp(string nom_fichier)
  16. {
  17. ch = new char[nbcar*nblg];
  18. ...
  19. }


 
Est ce que juste faire
 char *tab; puis
 tab = new [nbcar][nblg]; suffit?
Est ce que ca fait la meme chose que ce que je veux faire?

n°169563
LetoII
Le dormeur doit se réveiller
Posté le 02-07-2002 à 11:10:11  profilanswer
 

Là faut que tu test, j'ai jamais essayé. Par contre je crois que y a une syntaxe à la con pour déclarer la variable.
 
Mon conseil: tu fais un tableau comme je te l'ai mis dans le code et pour accéder à un élémenttu fais:
 

Code :
  1. //avant: tab[i][j]
  2. tab[i*nbcar+j];


---------------
Le Tyran
mood
Publicité
Posté le 02-07-2002 à 11:10:11  profilanswer
 

n°169616
the big be​n
Posté le 02-07-2002 à 11:43:31  profilanswer
 

mouais bon c est une solution (si ca fct qd mem) mais c est loin d etre joli ...


Message édité par the big ben le 02-07-2002 à 11:43:50
n°169621
LetoII
Le dormeur doit se réveiller
Posté le 02-07-2002 à 11:45:25  profilanswer
 

tu peux toujour tanter différentes permutations de:
 

Code :
  1. char (*tab)[taille1][taille2];


 
il me semble que c une syntaxe dans ce genre, mais bon...


---------------
Le Tyran
n°169624
the big be​n
Posté le 02-07-2002 à 11:46:32  profilanswer
 

ok je vais essayer de chipotter un peu avec ca...  
Merci !

n°169734
smaragdus
whores, drugs & J.S. Bach
Posté le 02-07-2002 à 12:56:49  profilanswer
 

letoII a écrit a écrit :

Là faut que tu test, j'ai jamais essayé. Par contre je crois que y a une syntaxe à la con pour déclarer la variable.
 
Mon conseil: tu fais un tableau comme je te l'ai mis dans le code et pour accéder à un élémenttu fais:
 

Code :
  1. //avant: tab[i][j]
  2. tab[i*nbcar+j];






 
Rien de tel pour rendre du code totalement illisible  et indébuggable :sarcastic:  
 
la méthode correcte est de reserver un tableau de pointeur et de reverser une chaine pour chaque pointeur :
 

Code :
  1. char** tableauDeChaine = NULL;
  2. tableauDeChaine = new char*[nbDeChaine]; // reserve un tableau de 'nbDeChaine' pointeurs
  3. tableauDeChaine[0] = new char[tailleDeChaine]; // reserve une chaine à la position 0 => avec un for, tu réserves tout le tableau

n°169804
LetoII
Le dormeur doit se réveiller
Posté le 02-07-2002 à 14:10:55  profilanswer
 

Smaragdus a écrit a écrit :

 
 
Rien de tel pour rendre du code totalement illisible  et indébuggable :sarcastic:  
 
la méthode correcte est de reserver un tableau de pointeur et de reverser une chaine pour chaque pointeur :
 

Code :
  1. char** tableauDeChaine = NULL;
  2. tableauDeChaine = new char*[nbDeChaine]; // reserve un tableau de 'nbDeChaine' pointeurs
  3. tableauDeChaine[0] = new char[tailleDeChaine]; // reserve une chaine à la position 0 => avec un for, tu réserves tout le tableau






 
S'il veut mêtre des chaines dedans ok, si non, bof.


Message édité par LetoII le 02-07-2002 à 14:11:09

---------------
Le Tyran
n°170118
bjone
Insert booze to continue
Posté le 02-07-2002 à 20:42:27  profilanswer
 

ça manque de constructeur de recopie tout ce bordel :D

n°170119
LetoII
Le dormeur doit se réveiller
Posté le 02-07-2002 à 20:44:49  profilanswer
 

bjone a écrit a écrit :

ça manque de constructeur de recopie tout ce bordel :D




 
Faut bien qu'il bosse un peu, je vais pas tout lui faire non plus! :D


---------------
Le Tyran
n°170139
fabsk
Posté le 02-07-2002 à 22:00:40  profilanswer
 

Une solution: utilise des enum pour definir les tailles. Je sais c'est pas top, mais bon c'est de la faute a MS qui n'aime pas les standards...

n°170228
Musaran
Cerveaulté
Posté le 03-07-2002 à 04:09:06  profilanswer
 

Ça viendra, mais on ne peut pas initialiser les constantes statiques de classe dans la déclaration de classe.
 
Alors utilises le truc de l'enum:

Code :
  1. class decomp {
  2. public:
  3. enum { nblg  = 10,nbcar = 255};
  4. char tab[nbcar][nblg];
  5. static char tab2[nbcar][nblg];
  6. };
  7. char tab2[decomp::nbcar][decomp::nblg]={1,2,3};


 
Pour initialiser tab, ben c'est le constructeur qui s'y colle.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°170237
LetoII
Le dormeur doit se réveiller
Posté le 03-07-2002 à 07:24:52  profilanswer
 

musaran a écrit a écrit :

Ça viendra, mais on ne peut pas initialiser les constantes statiques de classe dans la déclaration de classe.
 
Alors utilises le truc de l'enum:

Code :
  1. class decomp {
  2. public:
  3. enum { nblg  = 10,nbcar = 255};
  4. char tab[nbcar][nblg];
  5. static char tab2[nbcar][nblg];
  6. };
  7. char tab2[decomp::nbcar][decomp::nblg]={1,2,3};


 
Pour initialiser tab, ben c'est le constructeur qui s'y colle.




 
Ben non justement, à part avec visual ou c mal fichu, tu fait ça dans le cpp.


---------------
Le Tyran
n°170818
Musaran
Cerveaulté
Posté le 04-07-2002 à 00:16:09  profilanswer
 

letoII a écrit a écrit :

Ben non justement, à part avec visual ou c mal fichu, tu fait ça dans le cpp.


tu peux préciser ?
 
Si l'initialisation des constantes statiques peut se faire sur place, c'est que la norme à évolué ou que c'est pas standard ?
 
Je ne l'ai pas dit, mais la définition de tab2 doît être dans le source cpp.
 
Quand à tab, ce que je sais de la norme me dit qu'en tant que membre de donnée non statique, c'est dans le constructeur qu'on peut le remplir.


Message édité par Musaran le 04-07-2002 à 00:20:04

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°170859
LetoII
Le dormeur doit se réveiller
Posté le 04-07-2002 à 08:11:13  profilanswer
 

Regarde un peu plus haut ce que j'ai posté


---------------
Le Tyran
n°170918
the big be​n
Posté le 04-07-2002 à 10:35:51  profilanswer
 

Merci a tous !  :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++] class (newbie) [résolu]

 

Sujets relatifs
Visual c++ ???? Question newbie ![java] un .jar dans une archive jar ET jar + classpath [Résolu]
[php] pb redirection header / arguments RESOLU!![resolu]Generalized Linear Model et le langage C
XML et DTD (newbie inside)NEWBIE: Comment récupérer les données envoyés par un formulaire HTML
Largeur des boutons (RESOLU)location.href mais je n'ai pas de frame... (Slices) (Résolu)
[VB(A)] Newbie inside[SQL] Problème dans une requete Edit : résolu
Plus de sujets relatifs à : [c++] class (newbie) [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR