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

  FORUM HardWare.fr
  Programmation
  C++

  [c++] Erreur incomprehensible a la compilation: help me!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] Erreur incomprehensible a la compilation: help me!

n°227440
byron
Posté le 13-10-2002 à 11:23:56  profilanswer
 

Voila une petite partie des erreurs de mon compilateur:
 
h:\linux\vecteur.h(11) : error C2061: syntax error : identifier 'Vecteur'
h:\linux\vecteur.h(11) : error C2059: syntax error : ';'
h:\linux\vecteur.h(12) : error C2449: found '{' at file scope (missing function header?)
h:\linux\vecteur.h(57) : error C2059: syntax error : '}'
 
Voila les lignes en cause:
 
#ifndef _VECTEUR_H
#define _VECTEUR_H
 
class Vecteur                          //   <== C'est la ligne11
{
private:
 int taille;
 double * val;
public:
 Vecteur (int=0,double *=NULL);
 
C'est à n'y rien comprendre. Il me refuse la classe Vecteur.
 
Toute aide est la bienvenue. J'ai 28 erreurs a la compilation , mais je pense qu'une grosse partie vient du fait que le programme ne me reconnait pas le type Vecteur defini dans cette classe.

mood
Publicité
Posté le 13-10-2002 à 11:23:56  profilanswer
 

n°227441
byron
Posté le 13-10-2002 à 11:25:51  profilanswer
 

Je precise que lorsque je lance la compilation sous linux , je n'ai plus que 4 erreurs, dont un "parse error" dont je ne connais pas la signification.
 
Mais par contre, j'ai un mechant warning a propos de iostream.h

n°227461
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 13-10-2002 à 11:45:19  profilanswer
 

T'as pas l'impression d'avoir oublié une accolade fermante, et le ; qui va avec ?
 
[:leg9]

n°227469
byron
Posté le 13-10-2002 à 11:49:39  profilanswer
 

Le }; pour la fin de la classe?
 
Non, j'ai pas oublié, j'ai juste mis un petit extrait du fichier.
Je ne vois pas où se trouve le probleme sur ces lignes de code.
Si vous voulez, je poste le .h en totalité.

n°227476
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 13-10-2002 à 11:52:44  profilanswer
 

Poste mon ami, poste le .h

n°227483
Kristoph
Posté le 13-10-2002 à 11:59:29  profilanswer
 

Il y a une règle en C et en C++ qui dit que l'erreur viens toujours d'une ligne n ou "n <= m". m étant la ligne indiquée par le compilateur. Vérifie dans le code qui inclue ton vecteur, c'est la que se trouve l'erreur.

n°227494
Kristoph
Posté le 13-10-2002 à 12:07:46  profilanswer
 

Ne cherche pas ton erreur dans ce fichier mans dans le fichier qui l'inclue ! Lis un peu ce qu'on écrit ici.

n°227502
byron
Posté le 13-10-2002 à 12:13:13  profilanswer
 

Ok, desole , j'avais mal compris le sens de ton théorème ;)
Le truc, c'est que ca fait 3 jours que j'épluche le code , et je ne vois pas d'où viens mon problème. Je ne me serai jamais permis de poster pour demander de l'aide sans m'être decarcasse sur le probleme avant.
J'ai beau relire et reecrire mon code, ca ne marche pas :(

n°227513
bjone
Insert booze to continue
Posté le 13-10-2002 à 12:18:26  profilanswer
 

par contre, pense à remplaçer tous tes paramètres Vecteur par Vecteur &, sinon le CPU va passer son temps à faire de la recopie de données (et new/delete dans ton cas) :D


Message édité par bjone le 13-10-2002 à 12:20:50
n°227514
bjone
Insert booze to continue
Posté le 13-10-2002 à 12:19:20  profilanswer
 

sous nunux: renommer en .C sinon le compilo C et pas C++ est utilisé !!!!

mood
Publicité
Posté le 13-10-2002 à 12:19:20  profilanswer
 

n°227532
byron
Posté le 13-10-2002 à 12:33:54  profilanswer
 

Plus que 8 erreurs :)
 

Code :
  1. Compiling...
  2. vecteur.cpp
  3. H:\linux\vecteur.cpp(49) : error C2001: newline in constant
  4. H:\linux\vecteur.cpp(53) : error C2296: '<<' : illegal, left operand has type 'class Vecteur *const '
  5. H:\linux\vecteur.cpp(53) : error C2297: '<<' : illegal, right operand has type 'char [10]'
  6. H:\linux\vecteur.cpp(53) : error C2143: syntax error : missing ';' before 'tag::id'
  7. H:\linux\vecteur.cpp(54) : error C2143: syntax error : missing ';' before '{'
  8. H:\linux\vecteur.cpp(62) : error C2601: 'somme1' : local function definitions are illegal
  9. H:\linux\vecteur.cpp(74) : error C2601: 'somme2' : local function definitions are illegal
  10. H:\linux\vecteur.cpp(74) : fatal error C1903: unable to recover from previous error(s); stopping compilation
  11. Error executing cl.exe.
  12. vecteur.obj - 8 error(s), 0 warning(s)


Message édité par byron le 13-10-2002 à 12:37:08
n°227557
byron
Posté le 13-10-2002 à 14:19:00  profilanswer
 

Ca y est je bloque encore.
Je ne comprend pas certaines erreurs, et je ne vois pas d'où viens l'erreur de type.

n°227562
byron
Posté le 13-10-2002 à 14:34:49  profilanswer
 

Bon, voilà ou j'en suis dans mon probleme. Lors de la compilation de mon fichier .c, j'obtiens 2 erreurs.
 

Code :
  1. // Fichier 'vecteur.h'  
  2. #ifndef _VECTEUR_H
  3. #define _VECTEUR_H
  4. class Vecteur
  5. {
  6. private:
  7. int taille;
  8. double * val;
  9. public:
  10. Vecteur(int=0,double * =NULL); //Constructeur avec valeurs par défaut.
  11.         //Ex:Si on fait Vecteur v3(4), on obtient un vecteur  
  12.         //de taille 4, mais de valeur NULL.
  13. Vecteur(const Vecteur &);  //Constructeur par copie.
  14.         //On rajoute la contrainte 'const' qui agit comme une
  15.         //une sécurité:le constructeur par copie ne doit pas
  16.         //modifier la valeur.
  17.         //Ce constructeur permet de faire: Vecteur v4=v5.
  18. ~Vecteur();      //Destructeur.
  19. Vecteur somme1(Vecteur);  //fonction membre.
  20. friend Vecteur somme2(Vecteur,Vecteur); //Fonction amie
  21.           //'friend' permet d'acceder aux variables  
  22.           //privées de la classe.
  23. Vecteur operator+ (Vecteur);   //Surcharge de l'operateur +.
  24. Vecteur & operator= (const Vecteur &);  //Permet v1=v2=v3.
  25. double & operator[] (int);     //Permet x=v[1].
  26. double norme();        //Calcul de la norme d'un vecteur.
  27. double operator* (Vecteur);    //Permet v4=v3*v2.
  28. friend Vecteur operator* (double,Vecteur); //Produit d'un vecteur par un scalaire.
  29. void normalise();       //Normalisation.
  30. void affiche();        //Affichage d'un vecteur sous forme d'une
  31.            //fonction membre.
  32. friend ostream & operator<< (ostream &,const Vecteur &);
  33. //Permet d'écrire directement: cout <<"v3="<<v3<<endl au lieu de faire v3.affiche().
  34. double cosinus (Vecteur,Vecteur);
  35. };
  36. #endif
  37. //Fichier 'vecteur.c'
  38. #include <iostream.h>  //Necessaire pour utiliser 'cout' pour les traces Constr/Destr.
  39. #include <assert.h>
  40. #include <math.h>
  41. #include "vecteur.h"
  42. //Constructeur
  43. Vecteur::Vecteur(int t,double * s)
  44. {
  45. taille=t;
  46. val=new double[taille];
  47. if (s!=NULL)
  48.  {
  49.  for (int i=0;i<taille;i++)
  50.   val[i]=s[i];
  51.  }
  52. //Trace d'appel du constructeur:
  53. cout <<"Constructeur:taille="<<taille;
  54. cout <<"Valeur=";
  55. if(s) {cout <<"oui";}
  56. else {cout <<"non";}
  57. cout <<endl;
  58. }
  59. //Constructeur par copie:
  60. Vecteur::Vecteur(const Vecteur & v)
  61. {
  62. taille=v.taille;
  63. val=new double[taille];
  64. for(int i=0;i<taille;i++)
  65.  val[i]=v.val[i];
  66. //Trace d'appel du constructeur par copie:
  67. cout<<"Constructeur par copie"<<endl; // J'enleve le this qui me provoque une erreur.
  68. }
  69. //Destructeur:
  70. Vecteur::~Vecteur()
  71. {
  72. delete [] val;
  73. cout<<"Destructeur"<<endl;
  74. }
  75. //Somme de vecteurs:
  76. Vecteur Vecteur::somme1(Vecteur v)
  77. {
  78. assert(taille==v.taille);  //Si condition OK, on continue, sinon arret du programme.
  79.                     //Si les deux vecteurs n'ont pas la même taille==>abort!
  80. Vecteur result(taille);
  81. for (int i=0;i<taille;i++)
  82.  {
  83.  result.val[i]=val[i]+v.val[i];
  84.  }
  85. return result;
  86. }
  87. Vecteur somme2(Vecteur v1,Vecteur v2)
  88. {
  89. assert(v1.taille==v2.taille);
  90. Vecteur result(v1.taille);
  91. for (int i=0;i<v1.taille;i++)
  92.  {
  93.  result.val[i]=v1.val[i]+v2.val[i];
  94.  }
  95. return result;
  96. }
  97. Vecteur Vecteur::operator+ (Vecteur v)
  98. {
  99. assert(taille==v.taille);
  100. for (int i=0;i<taille;i++)
  101.  {
  102.  v.val[i]+=val[i];
  103.  }
  104. return v;
  105. }
  106. //On veut pourvoir écrire v1=v2 ==>On surcharge l'operateur =:
  107. Vecteur & Vecteur::operator= (const Vecteur & v)
  108. {
  109. if (taille !=0)
  110.  {
  111.  delete [] val;      // On efface et on initialise
  112.  taille=0;
  113.  taille=v.taille;
  114.  val=new double [taille];
  115.  for (int i=0;i<taille;i++)
  116.   {
  117.   val[i]=v.val[i];
  118.   }
  119.  return * this;      // Renvoie la reference à l'objet.
  120.           // Obligatoire si on veut enchainer v1=v2=v3=...
  121. }
  122. // Rq: Que se passe-t-il si on fait v1=v1? Que rajouter?
  123. double & Vecteur::operator[] (int i)
  124. {                                    //erreur ici
  125. assert((i>=0)&&(i<taille));
  126. return val[i];
  127. }
  128. // Norme d'un vecteur:
  129. double Vecteur::norme()
  130. {
  131. double norme=0;
  132. for (int i=0;i<taille;i++)
  133.  {
  134.  norme=norme+val[i]*val[i];
  135.  }
  136. return sqrt(norme);
  137. }
  138. // Produit scalaire
  139. double Vecteur::operator* (Vecteur v)
  140. {
  141. assert(taille==v.taille);
  142. double result=0;       // Variable locale
  143. for (int i=0;i<taille;i++)
  144.  {
  145.  result=result+val[i]*v.val[i];
  146.  }
  147. return result;
  148. }
  149. // Produit réel par vecteur:
  150. Vecteur operator* (double x,Vecteur v)
  151. {
  152. for (int i=0;i<v.taille;i++)
  153.  {
  154.  v.val[i]=x*v.val[i];
  155.  }
  156. return v;
  157. }
  158. // Normalisation d'un vecteur:
  159. void Vecteur::normalise()
  160. {
  161. double n=norme();
  162. for (int i=0;i<taille;i++)
  163.  {
  164.  val[i]=val[i]/n;
  165.  }
  166. }
  167. // Affichage:
  168. void Vecteur::affiche()       // v4.affiche()
  169. {
  170. cout<<"( ";
  171. for (int i=0;i<taille;i++)
  172.  {
  173.  if (i!=0) cout<<",";
  174.  cout<<val[i];
  175.  }
  176. cout<<" )"<<endl;
  177. }
  178. // Surcharge de <<: On va pouvoir faire 'cout<<v4<<endl;'
  179. ostream & operator<< (ostream & f,const Vecteur v)
  180. {
  181. f<<"( ";
  182. for (int i=0;i<v.taille;i++)
  183.  {
  184.  if (i!=0) f<<",";
  185.  f<<v.val[i];
  186.  }
  187. f<<" )";
  188. return f;
  189. }
  190. // Fonction cosinus
  191. double cosinus (Vecteur v1,Vecteur v2)
  192. {
  193. v1.normalise();
  194. v2.normalise();
  195. return v1*v2;
  196. }
  197. Erreurs de compilation:
  198. vecteur.cpp
  199. h:\linux\vecteur.cpp(113) : error C2601: '[]' : local function definitions are illegal
  200. h:\linux\vecteur.cpp(113) : fatal error C1903: unable to recover from previous error(s); stopping compilation
  201. Error executing cl.exe.


Message édité par byron le 13-10-2002 à 14:35:10
n°227568
byron
Posté le 13-10-2002 à 15:05:26  profilanswer
 

J'ai un probleme de definition de variable local:
 

Code :
  1. h:\linux\vecteur.cpp(113) : error C2601: '[]' : local function definitions are illegal
  2. h:\linux\vecteur.cpp(121) : error C2601: 'norme' : local function definitions are illegal
  3. h:\linux\vecteur.cpp(133) : error C2601: '*' : local function definitions are illegal
  4. h:\linux\vecteur.cpp(146) : error C2601: '*' : local function definitions are illegal
  5. h:\linux\vecteur.cpp(146) : fatal error C1903: unable to recover from previous error(s); stopping compilation

n°227645
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 13-10-2002 à 17:31:14  profilanswer
 

Citation :

Bon, voilà ou j'en suis dans mon probleme. Lors de la compilation de mon fichier .c, j'obtiens 2 erreurs.


 
// Fonction cosinus
 
double Vecteur::cosinus (Vecteur v1,Vecteur v2)
 {
 v1.normalise();
 v2.normalise();
 return v1*v2;
 }


Message édité par Harkonnen le 13-10-2002 à 17:32:43
n°227652
byron
Posté le 13-10-2002 à 17:39:53  profilanswer
 

Je vais essayer ca merci.
A present , j'ai deux erreurs de type.
 
Il aime pas l'assert taille==v.taille et la definition de tab1

n°227653
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 13-10-2002 à 17:43:29  profilanswer
 

byron a écrit a écrit :

Il aime pas l'assert taille==v.taille et la definition de tab1




c ou dans le source  :??:

n°227655
byron
Posté le 13-10-2002 à 17:44:57  profilanswer
 

Harkonnen a écrit a écrit :

 
c ou dans le source  :??:  




 
assert(taille==v.taille);

n°227656
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 13-10-2002 à 17:45:29  profilanswer
 

oui mais j'ai pas vu la définition de tab1

n°227657
byron
Posté le 13-10-2002 à 17:46:06  profilanswer
 

C'est sous la partie produit scalaire par exemple.
 
Le truc, c'est que je ne defini pas de fonction taille, juste un entier.
 
normalement, v.taille doit redonner la taille du vecteur.
Est-ce un oubli de mon prof, ou il existe une fonction taille incluse?


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

  [c++] Erreur incomprehensible a la compilation: help me!

 

Sujets relatifs
[C] Erreur lecture clavierCompilation avec Visual J++
problème de compilation...[java] pb a la compilation
Passer un gros site ASP de Access en SQL, HELP !Gros newbie inside .... lecture de char dans un fichier HELP !!!
Erreur dans les applis graphiquesErreur toute conne en php -> if...
erreur sql ca doit pas etre grand chose mais trouve pasErreur
Plus de sujets relatifs à : [c++] Erreur incomprehensible a la compilation: help me!


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