Creation de bibliotheque

Creation de bibliotheque - C++ - Programmation

Marsh Posté le 31-10-2002 à 21:40:50    

Bonjour a tous ...  
 
J'ai un fichier .c qui calcul des matrices une generé manuellement et l'autre par l'ordinateur...puis qui les additionnent...  
il se compose d'une fonction main, d'une fonction affichage des matrice et d'une fonction somme des matrices...  
 
A partir de ce fichier je doit creer ma bibliotheque...c-a-d  
 
que je doit creer un fichier matrice.h (regroupant  
toutes les declarations relative aux matrices)  
 
un autre matrice.c (regroupant les procedures ou fonction relative aux matrices)  
 
et un fichier principal.c regroupant ma fonction main et l'appel des 2 fonctions affiche-matrice et somme-matrice  
 
 
voici le code des 3 fichiers :
 
le fichier matrice.h

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define maxi 2
  4. typedef float matrice[maxi][maxi];
  5. matrice Mat;
  6. void afficheMat(matrice T);
  7. void sommeMat(matrice x, matrice y, matrice z);


 
le fichier matrice.c
 

Code :
  1. #include "matrice.h"
  2. void afficheMat(matrice T)        //fonction affichage des matrices  
  3. {
  4. int i,j;
  5. //-----------procedure d'affichage des matrices  
  6. for (i=0;i<maxi;i++)
  7. {
  8.   for (j=0;j<maxi;j++)
  9.   {
  10.    printf("%f ; ",T[i][j]);    //affichage reel des matrices  
  11.   }
  12. }
  13. fflush(stdin);
  14. getchar();
  15. }
  16. void sommeMat(matrice x, matrice y, matrice z)  //fonction somme des matrices  
  17. {
  18. int i,j;
  19. //------------calcul de la somme Mat1 + Mat2  
  20. for (i=0;i<maxi;i++)
  21. {
  22.   for (j=0;j<maxi;j++)
  23.   {
  24.    z[i][j]=x[i][j]+y[i][j];     //somme matrices  
  25.   }
  26. }
  27. fflush(stdin);
  28. getchar();
  29. }


 
le fichier principal.c
[/cpp]

Code :
  1. #include "matrice.h"
  2. void main()
  3. {
  4. /* Mat1 est une matrice dont les valeurs seront lues au clavier  
  5. */
  6. matrice Mat1 ;
  7. /* Mat2 est une matrice dont les valeurs seront g?n?r?es al?atoirement  
  8. */
  9. matrice Mat2 ;
  10. /* MatS est la somme des matrices Mat1 + Mat2  
  11. */
  12. matrice MatS ;
  13. /* i et j sont des entiers, indices des lignes et des colonnes des 2 matrices  
  14. */
  15. int i, j ;
  16. //------------lecture des valeurs des coefficients de Mat1 au clavier  
  17. printf("Donner les coefficients de la matrice :\n" ) ;
  18. for (i=0;i<maxi;i++)              //for pour la 1ere dimension  
  19. for (j=0;j<maxi;j++)          //for pour la 2eme dimension  
  20. {
  21.   printf("\ndonner M(%d, %d) : ", i, j) ;
  22.   scanf("%f", &Mat1[i][j]) ; //un indice par dimension  
  23. }
  24. //------------g?n?ration al?atoire des valeurs des coefficients de Mat2  
  25. randomize();
  26. for (i=0;i<maxi;i++)
  27. for (j=0;j<maxi;j++)
  28. {
  29.   Mat2[i][j] = random(10001)-5000 ;
  30. }
  31. //------------affichages des deux matrices Mat1 et Mat2  
  32. printf("\nMat1 : " ) ;
  33. afficheMat(Mat1) ;
  34. printf("\nMat2 : " ) ;
  35. afficheMat(Mat2) ;
  36. //------------affichage de la somme des matrices  
  37. sommeMat(Mat1,Mat2,MatS) ;
  38. printf("\nMatS : " ) ;
  39. afficheMat(MatS) ;
  40. fflush(stdin) ;
  41. getchar() ;
  42. }


 
quand je comile les 3 fichier je n'obtient pas d'erreur...mais par contre des que j'execute le fichier principal.c j'obtient 2 erreurs qui sont:  
 
Linker error: undefined symbol _afficheMat in principal.c  
Linker error: undefined symbol _sommeMat in principal.c  
 
de quoi peuvent venir ces erreurs ???


Message édité par FabienM le 03-11-2002 à 13:58:42
Reply

Marsh Posté le 31-10-2002 à 21:40:50   

Reply

Marsh Posté le 31-10-2002 à 21:51:39    

bon deja les librairie qui viennent de toi tu dois les declarer comme ca dans ton code :
 
#include "matrice.h" et non <matrice.h>
 

Reply

Marsh Posté le 31-10-2002 à 22:46:13    

pis le "le probleme est , qd je compile ca ne marche plus !! g pleins d'erreurs", j'aime bpc, ca nous aide a mort
(dis nous plutot les erreurs données par le compilo :O)

Reply

Marsh Posté le 31-10-2002 à 23:04:17    

ben change deja ce que je viens de te dire car si le compilo ne trouve deja pas le prototypes de tes fonctions (*.h) et les fonctions elles memes (*.c) il genere des erreurs ....

Reply

Marsh Posté le 31-10-2002 à 23:48:11    

Bon deja merci à tous !!
J'ai dc modifié l'inclusion de ma librairie entre guillemets...
ca corrige deja pas mal d'erreur!
 
Mais il m'indique encore 2 erreurs...ki st :
 
Linker error: undefined symbol _afficheMat in ....(vers le repertoire où se trouve le fichier principal)
 
et la seconde c la meme avec l'appel de la fonction _sommeMat !!
 
 
Euh sinon ma bibliotheque matrice.h doit se trouver obligatoirement ds le repertoire avec les autres bibliotheques ?? ou seulement ds le meme repertoire ke mon fichier principal ??
 
merci encore !

Reply

Marsh Posté le 01-11-2002 à 12:04:18    

bon, tes deux fichiers c qui sont a part donc en dehors de ton main et dont les prototypes sont declarés dans un *.h tu les compiles simplement et tu insere dans ton projet principal les *.obj generé par le compilateur. Normalement les erreurs de linker devraient disparaitres...
 
Bonne chance
 
et n'hesite pas

Reply

Marsh Posté le 01-11-2002 à 14:41:56    

J ai fait ce ke tu m'a dit mais il y a tjr les 2 meme erreurs
 
Linker Error pour afficheMat et pour sommeMat !!
 
peut tu m'eclairer sur l'erreur linker error ..
merci !

Reply

Marsh Posté le 01-11-2002 à 22:46:17    

Tes fichiers, ce sont tous des .c ou .h? J'avais déja eu des problemes en combinant les .c et les .cpp

Reply

Marsh Posté le 01-11-2002 à 23:28:10    

Euh ...
eh bien j'ai 2 fichiers en .c (principal.c et matrice.c)
et 1 en .h (matrice.h)
 

Reply

Marsh Posté le 02-11-2002 à 09:55:19    

hmmmmmm c'est bizzare... Tu les compiles avec quelle commande

Reply

Marsh Posté le 02-11-2002 à 09:55:19   

Reply

Marsh Posté le 02-11-2002 à 11:01:08    

J'utilise Turbo C++ comme compilateur....je sais c pas tres recent mais on utilise cela !!
 
Sinon je compile mes fichiers avec la commande compile puis ( il n'y a aucune erreur dans les 3 fichiers)
puis j'execute avec la commande run le fichier principal.....et la 2 erreurs de liens !!
 
là je n'y comprend plus rien !

Reply

Marsh Posté le 02-11-2002 à 11:23:16    

Tu pourrais éditer ton premier post? Ca serait plus clair. On dirait que y'a un fichier qui apparait deux fois... Et rajoute aussi des balises spéciales pour le code source, ca sera mieux


Message édité par Ace17 le 02-11-2002 à 11:23:43
Reply

Marsh Posté le 02-11-2002 à 11:29:59    

voila le post a été edité et j'espere avoir été plus clair ;)

Reply

Marsh Posté le 02-11-2002 à 12:48:50    

En effet c'est beaucoup plus clair! Maintenant, es tu vraiment sur que ce soit ca que tu essaie de compiler? Car je vois deux erreurs qui devraient t'empecher d'arriver jusqu'a ton probleme : les iterateurs dans afficheMat ne sont pas déclarés; et aussi la variable globale matrice Mat est présente en deux exemplaires dans ton programme : un pour matrice.c et un pour principal.c
Tu as du faire des modifications depuis dans tes fichiers source.

Reply

Marsh Posté le 02-11-2002 à 19:56:12    

Alors ma variable globale je la met ds le fichier principal et je la supprime de matrice.h ??
sinon je ne comprend pas ce que tu veut dire par les iterateur ne sont pas declarer ds afficheMat !
 
car si tu veux avant de creer 3 fichiers avec librairie .H
le programme etait en 1 seul morceau et fonctionnait sans aucun probleme...

Reply

Marsh Posté le 02-11-2002 à 21:48:51    

Ben ta variable globale elle sert a quoi en fait? Elle n'est a priori référencée nulle part! Supprime la carrément. D'autre part, les i et j que tu utilises dans afficheMat et sommeMat, ils sont déclarés ou?

Reply

Marsh Posté le 03-11-2002 à 13:00:51    

Si si g bien declaré les variable i et j ....c juste ke g mis les mauvais fichiers (g tellement fait d'essai...)
je les ai declarée ds le fichier matrice.c

Reply

Marsh Posté le 03-11-2002 à 13:18:52    

oui justement c'est ce que je disais, donc pourrait tu mettre les bons fichiers? :)

Reply

Marsh Posté le 03-11-2002 à 14:02:33    

Voila c modifié...
j'ai supprimé ma variable globale mais tjr les meme erreurs de liens!

Reply

Marsh Posté le 03-11-2002 à 15:40:39    

Bon ben ce code source ne peut pas etre mis en cause; ce n'est pas lui le responsable. Moi je pense que ca vient de la commande de compilation
 
edit : ta variable globale est toujours la! :D


Message édité par Ace17 le 03-11-2002 à 16:42:15
Reply

Marsh Posté le 03-11-2002 à 16:48:59    

je ne sais pas de koi ca vient mais je verrai ca cette semiane a l'IUT !!!
mais merci de ton aide [:zone prix]

Reply

Marsh Posté le 05-11-2002 à 00:26:46    

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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