' ' does not name a type

' ' does not name a type - C++ - Programmation

Marsh Posté le 15-05-2011 à 23:40:35    


Bonjours tout le monde.
Ne trouvant rien sur internet correspondant a mon problème je vous écrit.
Je suis nouveau dans le concepte de créé plusieur hiders et cpp.
 
Voila mon problème :
J'ai créé un projet qui contient deux hiders et deux cpp.
Dans le 1er hiders j'ai mis ma class A;
Dans le deuxième hiders j'ai inclue mon 1er hiders.
Puis j'inclue le deuxième hiders dans mes deux cpp.
Un de mes cpp utilise la class A. Mais lorsque je compile il afiche l'erreur 'A' does not name a type.
 
Pouvez vous m'aider svp??Par avance merci.

Reply

Marsh Posté le 15-05-2011 à 23:40:35   

Reply

Marsh Posté le 16-05-2011 à 09:12:04    

Bonjour,
 
Alors déjà "hider", c'est dans les films d'horreur. En informatique, on parle plutôt de "header" !
 
Tes headers sont dans le même répertoire que les autres fichiers ? Ton "include path" est correct ?

Reply

Marsh Posté le 16-05-2011 à 10:30:22    

Et puis c'est sur que si tu donnes pas le code de la ligne incriminée, on est bien parti...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-05-2011 à 13:04:51    

Désolé pour l'orthographe. C'est loin d'être mon fort.
Je voulais pas mettre mon code non plus car sa prend bcp de place.
 
J'utilise Qt et vous verrez la fonction exercice de ma fenetre me sert essentiellement de test. Elles se contentes d'appeller une autre fonction("GaussSansPivot" ).  
 
Voici le cpp ou sa plante
 

Code :
  1. #include <iostream>
  2. #include "Graphique.h"
  3. using namespace std;
  4. vector GaussSansPivot (matrice A,vector b)
  5. {
  6.     matrice L(A.dimension()),U(A.dimension());
  7.     vector x(A.dimension());
  8.     float somme;
  9.     int i,k,j;
  10.     U=A;
  11.     x=b;
  12.     L.unite();
  13.     for(k=0;k<A.dimension()-1;k++)
  14.     {
  15.         for(i=k+1;i<A.dimension();i++)
  16.         {
  17.             L[i][k]=U[i][k]/U[k][k];
  18.             for(j=k;j<A.dimension();j++)
  19.             {
  20.                 U[i][j]=U[i][j]-L[i][k]*U[k][j];
  21.             }
  22.             x[i]=x[i]-L[i][k]*x[k];
  23.         }
  24.     }
  25.     L.aff();
  26.     U.aff();
  27.     x[A.dimension()-1]=x[A.dimension()-1]/U[A.dimension()-1][A.dimension()-1];
  28.     for(i=A.dimension()-2;i>=0;i--)
  29.     {
  30.         somme= 0;
  31.         for(k=i+1;k<A.dimension();k++)
  32.         {
  33.             somme=somme + U[i][k]*x[k];
  34.         }
  35.         x[i]=(x[i]-somme)/U[i][i];
  36.     }
  37.     return x;
  38. }
  39. vector GaussAvecPivot (matrice A,vector b)
  40. {
  41.     matrice L(A.dimension()),U(A.dimension()),P(A.dimension());
  42.     vector x(A.dimension());
  43.     float somme,max;
  44.     int i,k,j,pos;
  45.     U=A;
  46.     x=b;
  47.     P.unite();
  48.     for(k=0;k<A.dimension()-1;k++)
  49.     {
  50.         max=U[k][k];
  51.         pos=k;
  52.         for(i=k+1;i<A.dimension();i++)
  53.         {
  54.             if(U[i][k]>max)
  55.             {
  56.                 max=U[i][k];
  57.                 pos=i;
  58.             }
  59.         }
  60.         L.echangeLigne(k,pos);
  61.         U.echangeLigne(k,pos);
  62.         P.echangeLigne(k,pos);
  63.         x.echangeLigne(k,pos);
  64.         for(i=k+1;i<A.dimension();i++)
  65.         {
  66.             L[i][k]=U[i][k]/U[k][k];
  67.             for(j=k;j<A.dimension();j++)
  68.             {
  69.                 U[i][j]=U[i][j]-L[i][k]*U[k][j];
  70.             }
  71.             x[i]=x[i]-L[i][k]*x[k];
  72.         }
  73.     }
  74.     x[A.dimension()-1]=x[A.dimension()-1]/U[A.dimension()-1][A.dimension()-1];
  75.     for(i=A.dimension()-2;i>=0;i--)
  76.     {
  77.         somme= 0;
  78.         for(k=i+1;k<A.dimension();k++)
  79.         {
  80.             somme=somme + U[i][k]*x[k];
  81.         }
  82.         x[i]=(x[i]-somme)/U[i][i];
  83.     }
  84.     L.unite();
  85.     L.aff();
  86.     U.aff();
  87.     P.aff();
  88.     return x;
  89. }
  90. vector GaussSeidel (matrice A, vector b, vector X0, float tol,int max)
  91. {
  92.     vector x,diff;
  93.     int nbIt=0,i,j;
  94.     float rest=0,resOld,resNew;
  95.     x.changeTaille(A.dimension());
  96.     diff.changeTaille(A.dimension());
  97.     x=X0;
  98.     diff=b-MV(A,x);
  99.     rest=(diff.normeC())/(b.normeC());
  100.     while( nbIt<max && rest>tol*tol)
  101.     {
  102.         for(i=0;i<A.dimension();i++)
  103.         {
  104.             resNew=0;
  105.             resOld=0;
  106.             for(j=i+1;j<A.dimension();j++)
  107.             {
  108.                 resOld=resOld+A[i][j]*x[j];
  109.             }
  110.             for(j=0;j<=i-1;j++)
  111.             {
  112.                 resNew=resNew+A[i][j]*x[j];
  113.             }
  114.             x[i]=(1/A[i][i])*(b[i]-resOld-resNew);
  115.         }
  116.         diff=b-MV(A,x);
  117.         rest=diff.normeC()/b.normeC();
  118.         nbIt++;
  119.     }
  120.     return x;
  121. }
  122. vector gradient(matrice A, vector b, vector X0, float tol, int max )
  123. {
  124.     vector x,diff,Ad,d,tempo2,dInit;
  125.     int nbIt=0,i,j;
  126.     float rest=0,denominateur,numerateur,alpha,beta;
  127.     x=X0;
  128.     diff=b-MV(A,x);
  129.     d=diff;
  130.     rest=(diff.normeC())/(b.normeC());
  131.     while( nbIt<max && rest>tol*tol)
  132.     {
  133.         denominateur=0;
  134.         numerateur=0;
  135.         nbIt++;
  136.         Ad=MV(A,d);
  137.         for(i=0;i<A.dimension();i++)
  138.         {
  139.             denominateur=denominateur+  d[i]*Ad[i];
  140.             numerateur=numerateur+ diff[i]*d[i];
  141.         }
  142.         alpha=numerateur/denominateur;
  143.         x=x+diff*alpha;
  144.         diff=b-MV(A,x);
  145.         rest=(diff.normeC())/(b.normeC());
  146.         Ad=MV(A,d);
  147.         tempo2=MV(A,diff);
  148.         denominateur=0;
  149.         numerateur=0;
  150.         for(i=0;i<A.dimension();i++)
  151.         {
  152.             denominateur=denominateur+ Ad[i]*d[i];
  153.             numerateur=numerateur+ d[i]*tempo2[i];
  154.         }
  155.         beta=numerateur/denominateur;
  156.         d=diff-beta*d;
  157.     }
  158.     return x;
  159. }


Le programme me met la même erreur pour chaque début de fonction tel que "vector gradient(matrice A, vector b, vector X0, float tol, int max )"
La class vector étant définit dans le premier headers avec ma classe matrice  
Voici sont code
 

Code :
  1. #ifndef PROJETCLANU
  2. #define PROJETCLANU
  3. #include <iostream.h>
  4. class matrice;
  5. //definition des vecteurs
  6. class vector
  7. {
  8.     private :
  9.     float *V;
  10.     int taille;
  11.     public :
  12.     //constructeur et destructeur
  13.     vector(int T=1);
  14.     vector(const vector & vec);
  15.     ~vector();
  16.     //surdefinition d'operateur
  17.     float & operator[](int i);
  18.     vector operator=(const vector & vec);
  19.     //fonction
  20.     void aff(void);
  21.     void changeTaille(int taille);
  22.     void echangeLigne(int N1,int N2);
  23.     float normeC(void);
  24.     //fonction amie
  25.     friend vector MV(matrice matr,vector vec);
  26.     friend vector operator+(vector a,vector b);
  27.     friend vector operator-(vector a,vector b);
  28.     friend vector operator*(vector a,float alpha);
  29.     friend vector operator*(float alpha, vector a);
  30. };
  31. vector::vector(int T)
  32. {
  33.     int i;
  34.     V = new float [T];
  35.     taille=T;
  36.     for(i=0;i<taille;i++)
  37.     {
  38.         *(V+i)=0;
  39.     }
  40. }
  41. vector::vector(const vector & vec)
  42. {
  43.     int i;//compteur
  44.     taille=vec.taille;
  45.     V = new float[taille];
  46.     for(i=0;i<taille;i++)
  47.     {
  48.         V[i]=vec.V[i];
  49.     }
  50. }
  51. vector::~vector()
  52. {
  53.     delete V;
  54. }
  55. float & vector::operator[](int i)
  56. {
  57.     return *(V+i);
  58. }
  59. vector vector::operator=(const vector & vec)
  60. {
  61.     int i;
  62.     if(this != &vec)
  63.     {
  64.         delete V;
  65.         taille=vec.taille;
  66.         V=new float[taille];
  67.         for(i=0;i<taille;i++)
  68.         {
  69.             V[i]=vec.V[i];
  70.         }
  71.     }
  72.     return *this;
  73. }
  74. void vector::aff(void)
  75. {
  76.     int i;
  77.     for(i=0;i<taille;i++)
  78.     {
  79.         cout<<*(V+i)<<endl;
  80.     }
  81.     cout<<endl;
  82. }
  83. void vector::changeTaille(int n)
  84. {
  85.     delete V;
  86.     V=new float[n];
  87.     taille=n;
  88. }
  89. void vector::echangeLigne(int N1,int N2)
  90. {
  91.     float tempo;
  92.     tempo=V[N1];
  93.     V[N1]=V[N2];
  94.     V[N2]=tempo;
  95. }
  96. float vector::normeC(void)
  97. {
  98.     int i;
  99.     float resul=0;
  100.     for(i=0;i<taille;i++)
  101.     {
  102.         resul=resul+V[i]*V[i];
  103.     }
  104.     return resul;
  105. }
  106. //definition des matrices
  107. class matrice
  108. {
  109.     private :
  110.     float **M; //notre pointeur pour aller cherché les élément de la matrice
  111.     int taille;
  112.     public :
  113.     matrice(int T=1); //on reçois en argument la taille de la matrice CARRE
  114.     matrice(const matrice &matr);//constructeur de recopie
  115.     ~matrice();//destructeur
  116.     float * operator[](int i);//surdefinition de l'operateur[]
  117.     matrice operator=(const matrice & matr);//surdefinition de l'operateur =
  118.     void aff(void);//fonction afficher
  119.     void echangeLigne(int N1,int N2);//échanger la ligne N1 avec la ligne N2
  120.     void changeTaille(int n);
  121.     void unite(void);
  122.     void Hilbert(void);
  123.     int dimension(void);
  124.     friend vector MV(matrice matr,vector vec);//fonction multipliant un vecteur et une matrice
  125. };
  126. matrice::matrice(int T)
  127. {
  128.     int i,j;//compteur
  129.     M = new float*[T];//on crée un tableau de pointeur
  130.     for(i=0;i<T;i++)
  131.     {
  132.         M[i]=new float[T];
  133.     }
  134.     taille=T;
  135.     for(i=0;i<taille;i++)
  136.     {
  137.         for(j=0;j<taille;j++)
  138.         {
  139.             M[i][j]=0;
  140.         }
  141.     }
  142. }
  143. matrice::matrice(const matrice &matr)
  144. {
  145.     int i,j;//compteur
  146.     taille=matr.taille;
  147.     M = new float*[taille];
  148.     for(i=0;i<taille;i++)
  149.     {
  150.         M[i]=new float[taille];
  151.     }
  152.     for(i=0;i<taille;i++)
  153.     {
  154.         for(j=0;j<taille;j++)
  155.         {
  156.             M[i][j]=matr.M[i][j];
  157.         }
  158.     }
  159. }
  160. matrice::~matrice()
  161. {
  162.     int i;
  163.     for(i=0;i<taille;i++)
  164.     {
  165.         delete M[i];
  166.     }
  167.     delete M;
  168. }
  169. float * matrice::operator[](int i)
  170. {
  171.     return *(M+i);
  172. }
  173. matrice matrice::operator=(const matrice & matr)
  174. {
  175.     int i;
  176.     int j;
  177.     if(this != &matr)
  178.     {
  179.         for(i=0;i<taille;i++)
  180.         {
  181.             delete M[i];
  182.         }
  183.         delete M;
  184.         taille=matr.taille;
  185.         M = new float*[taille];
  186.         for(i=0;i<taille;i++)
  187.         {
  188.             M[i]=new float[taille];
  189.         }
  190.         for(i=0;i<taille;i++)
  191.         {
  192.             for(j=0;j<taille;j++)
  193.             {
  194.                 M[i][j]=matr.M[i][j];
  195.             }
  196.         }
  197.     }
  198.     return *this;
  199. }
  200. void matrice::aff(void)
  201. {
  202.     int i;
  203.     int j;
  204.     for(i=0;i<taille;i++)
  205.     {
  206.         for(j=0;j<taille;j++)
  207.         {
  208.             cout<<M[i][j]<<"  ";
  209.         }
  210.         cout<<endl;
  211.     }
  212.     cout<<endl;
  213. }
  214. void matrice::echangeLigne(int N1,int N2)
  215. {
  216.     int i;
  217.     float tempo;
  218.     for(i=0;i<taille;i++)
  219.     {
  220.         tempo=M[N1][i];
  221.         M[N1][i]=M[N2][i];
  222.         M[N2][i]=tempo;
  223.     }
  224. }
  225. void matrice::changeTaille(int n)
  226. {
  227.     int i;
  228.     for(i=0;i<taille;i++)
  229.     {
  230.         delete M[i];
  231.     }
  232.     delete M;
  233.     M=new float*[n];
  234.     for(i=0;i<n;i++)
  235.     {
  236.         M[i]=new float[n];
  237.     }
  238.     taille=n;
  239. }
  240. void matrice::unite(void)
  241. {
  242.     int i;
  243.     for(i=0;i<taille;i++)
  244.     {
  245.         M[i][i]=1;
  246.     }
  247. }
  248. void matrice::Hilbert(void)
  249. {
  250.     int i,j;
  251.     for(i=0;i<taille;i++)
  252.     {
  253.         for(j=0;j<taille;j++)
  254.         {
  255.             M[i][j]=1.0/(i+j+1);//i et j commence à 0,1.0 pour forcer le résultat en float.
  256.         }
  257.     }
  258. }
  259. int matrice::dimension(void)
  260. {
  261.     return taille;
  262. }
  263. //declaration des fonction amis
  264. vector MV(matrice matr,vector vec)
  265. {
  266.     int i=0,j=0;
  267.     vector resul(vec.taille);
  268.     if(matr.taille == vec.taille)
  269.     {
  270.         for(i=0;i<vec.taille;i++)
  271.         {
  272.             for(j=0;j<vec.taille;j++)
  273.             {
  274.                 resul[i]=resul[i]+matr[i][j]*vec[j];
  275.             }
  276.         }
  277.     }
  278.     return resul;
  279. }
  280. vector operator+(vector a,vector b)
  281. {
  282.     vector resul(1);
  283.     if(a.taille==b.taille)
  284.     {
  285.         int i;
  286.         resul.changeTaille(a.taille);
  287.         for(i=0;i<a.taille;i++)
  288.         {
  289.             resul[i]=a.V[i]+b.V[i];
  290.         }
  291.     }
  292.     return resul;
  293. }
  294. vector operator-(vector a,vector b)
  295. {
  296.     vector resul(1);
  297.     if(a.taille==b.taille)
  298.     {
  299.         int i;
  300.         resul.changeTaille(a.taille);
  301.         for(i=0;i<a.taille;i++)
  302.         {
  303.             resul[i]=a.V[i]-b.V[i];
  304.         }
  305.     }
  306.     return resul;
  307. }
  308. vector operator*(vector a,float alpha)
  309. {
  310.     int i;
  311.     vector resul(2);
  312.     for(i=0;i<a.taille;i++)
  313.     {
  314.         resul[i]=a[i]*alpha;
  315.     }
  316.     return resul;
  317. }
  318. vector operator*(float alpha, vector a)
  319. {
  320.     int i;
  321.     vector resul(2);
  322.     for(i=0;i<a.taille;i++)
  323.     {
  324.         resul[i]=a[i]*alpha;
  325.     }
  326.     return resul;
  327. }
  328. //fonction de clanuProject
  329. vector GaussSansPivot (matrice A,vector b);
  330. vector GaussAvecPivot (matrice A,vector b);
  331. vector GaussSeidel (matrice A, vector b, vector X0, float tol,int max );
  332. vector gradient (matrice A, vector b, vector X0, float tol, int max );
  333. #endif


 
et pour finir voici le deuxième headers
 

Code :
  1. #define GRAPHIQUE
  2. #include<iostream.h>
  3. #include <QApplication>
  4. #include <QFont>
  5. #include <QPushButton>
  6. #include "projetClanu.h"
  7. class Fenetre : public QWidget
  8. {
  9.     Q_OBJECT
  10.     private:
  11.     QPushButton *Bouton;
  12.     int nbBouton;
  13.     public:
  14.     Fenetre(int longueur=600,int largeur=600);
  15.     void rajouterBouton(int x,int y,char * nom,int taillePolice=12, char* nompolice="Viner Hand ITC" );
  16.     public slots:
  17.     void exercice(void);
  18. };
  19. Fenetre::Fenetre(int longueur,int largeur)
  20. {
  21.     setFixedSize(longueur,largeur);
  22. }
  23. void Fenetre::rajouterBouton(int x,int y,char * nom,int taillePolice, char* nompolice)
  24. {
  25.     Bouton = new QPushButton(nom,this);
  26.     Bouton->setFont(QFont(nompolice,taillePolice));
  27.     Bouton->setCursor(Qt::PointingHandCursor);
  28.     Bouton->move(x,y);
  29.     QObject::connect(Bouton,SIGNAL(clicked()),this,SLOT(exercice()));
  30. }
  31. void Fenetre::exercice(void)
  32. {
  33.     int i;
  34.     matrice a(3),hil(20);
  35.     vector v(20),resul(20),X0(2);
  36.     hil.Hilbert();
  37.     hil.aff();
  38.     a[0][0]=1;
  39.     a[0][1]=4;
  40.     a[0][2]=7;
  41.     a[1][0]=2;
  42.     a[1][1]=5;
  43.     a[1][2]=8;
  44.     a[2][0]=3;
  45.     a[2][1]=6;
  46.     a[2][2]=11;
  47.     X0[0]=2;
  48.     X0[1]=-1.5;
  49.     for(i=0;i<20;i++)
  50.     {
  51.         v[i]=1;
  52.     }
  53.     v=MV(hil,v);
  54.     resul=GaussSansPivot(hil,v);
  55.     resul.aff();
  56. }
  57. #endif


 
N'étant pas un pro en info, si vous avez des reproche à faire à mon code n'hésiter pas à me les dires, je suis la pour apprendre.
 
Toute les fonction dans mon cpp ont été testé avant que j'éclate mon fichier en petit morceau pour le rendre plus lisible. Elles ne sont donc pas source d'erreur.


Message édité par gilou le 16-05-2011 à 13:53:36
Reply

Marsh Posté le 16-05-2011 à 13:18:11    

Pense à utiliser la balise [code] quand tu insère du code dans un post.
 
Ton "using namespace std" est mal placé : il devrait être juste après ton "#include <iostream>"
 
Je pense que le souci vient de là, car du coup, c'est le contenu du fichier "Graphisme.h" qui est censé appartenir à l'espace de nom "std".

Reply

Marsh Posté le 16-05-2011 à 13:32:01    


Il y a maintenant une nouvelle erreur dans le headers qui contient ma class vector (le 1er)
 
" 'vector' has not been declared"

Reply

Marsh Posté le 16-05-2011 à 13:33:31    

Cette erreur apparait dès le constructeur

Reply

Marsh Posté le 16-05-2011 à 13:37:04    

"vector" et "matrice" sont définis dans "Graphisme.h" ? Parce que si ce n'est pas le cas, il faut inclure le header qui va bien...

Reply

Marsh Posté le 17-05-2011 à 00:19:13    

j'ai inclue le headers les contenants dans "graphisme.h" donc normalement c'est bon.

Reply

Marsh Posté le 17-05-2011 à 10:16:22    

En tout cas, il n'a pas l'air de connaitre l'objet "vector". Peux-tu poster le code de Graphisme.h (juste la zone où tu inclus le header) ?

Reply

Sujets relatifs:

Leave a Replay

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