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

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

Marsh Posté le 13-10-2002 à 11:23:56    

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.

Reply

Marsh Posté le 13-10-2002 à 11:23:56   

Reply

Marsh Posté le 13-10-2002 à 11:25:51    

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

Reply

Marsh Posté le 13-10-2002 à 11:45:19    

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

Reply

Marsh Posté le 13-10-2002 à 11:49:39    

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é.

Reply

Marsh Posté le 13-10-2002 à 11:52:44    

Poste mon ami, poste le .h

Reply

Marsh Posté le 13-10-2002 à 11:59:29    

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.

Reply

Marsh Posté le 13-10-2002 à 12:07:46    

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

Reply

Marsh Posté le 13-10-2002 à 12:13:13    

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 :(

Reply

Marsh Posté le 13-10-2002 à 12:18:26    

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
Reply

Marsh Posté le 13-10-2002 à 12:19:20    

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

Reply

Marsh Posté le 13-10-2002 à 12:19:20   

Reply

Marsh Posté le 13-10-2002 à 12:33:54    

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
Reply

Marsh Posté le 13-10-2002 à 14:19:00    

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

Reply

Marsh Posté le 13-10-2002 à 14:34:49    

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
Reply

Marsh Posté le 13-10-2002 à 15:05:26    

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

Reply

Marsh Posté le 13-10-2002 à 17:31:14    

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
Reply

Marsh Posté le 13-10-2002 à 17:39:53    

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

Reply

Marsh Posté le 13-10-2002 à 17:43:29    

byron a écrit a écrit :

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




c ou dans le source  :??:

Reply

Marsh Posté le 13-10-2002 à 17:44:57    

Harkonnen a écrit a écrit :

 
c ou dans le source  :??:  




 
assert(taille==v.taille);

Reply

Marsh Posté le 13-10-2002 à 17:45:29    

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

Reply

Marsh Posté le 13-10-2002 à 17:46:06    

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?

Reply

Sujets relatifs:

Leave a Replay

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