[C++]Un problème de notions d'objet : redefinition de fonctions

Un problème de notions d'objet : redefinition de fonctions [C++] - C++ - Programmation

Marsh Posté le 04-06-2003 à 09:47:48    

Voila, une application (une dll, extension d'un programme) a été divisée (pas par moi, mais par quelqu'un qui programme comme un porc) en deux projets : Imes et ImesInterface.
J'ai créé une classe MenuCamera que j'ai placé dans le projet Imes (ailleurs, ca me faisait 102 erreurs...). Cette classe s'ajoute automatiquement au projet ImesInterface.
 
Maintenant, j'aimerais appeler la fonction StartAcquire() (en bas à gauche du screenshot). On m'a déjà dit qu'il fallait l'utiliser ainsi :     ::StartAcquire(0);
 
Or, voyez les erreurs de compilation que cela me donne....
 
http://banguy.free.fr/AideClasse.jpg
 
 
 
Comment faire, donc, pour me permettre d'utiliser ces fonctions. Doisje déplacer ma classe MenuCamera ? Y a t'il quelque chose que je n'ai pas compris ? :jap: merci...


Message édité par backdafuckup le 04-06-2003 à 09:48:16
Reply

Marsh Posté le 04-06-2003 à 09:47:48   

Reply

Marsh Posté le 04-06-2003 à 09:49:45    

C deux DLL ou une seule tes deux projets?


---------------
Le Tyran
Reply

Marsh Posté le 04-06-2003 à 09:51:49    

LetoII a écrit :

C deux DLL ou une seule tes deux projets?


Apparement, ca n'exporte qu'une dll : ImesInterface.dll

Reply

Marsh Posté le 04-06-2003 à 09:58:01    

Ben, à mon avis, il n'y a QUE le projet ImesInterface qui est utilisé.
Et, fait voir la déclaration (ds le .h) de la méthode StarAcquire() stp...


Message édité par El_gringo le 04-06-2003 à 09:58:13
Reply

Marsh Posté le 04-06-2003 à 10:01:41    

Voila ce qu'il y a pour la fonction StartAcquire... C'est sur la définition de la fonction que le compilo pointe la redéfinition.
Voila...
 

Code :
  1. DM_ImageToken_1Ref StartAcquire(short mode)
  2. {
  3.    DM::Image image;
  4. // PLUG_IN_ENTRY and PLUG_IN_EXIT are required in any script function to handle
  5. // C++ exceptions properly.
  6. PLUG_IN_ENTRY
  7. switch (mode)
  8. {
  9.  case 0:
  10.   // create a new image.
  11.   short sx, sy;
  12.   gImesPlugIn.m_imes->cam->getImageSize(&sx, &sy);
  13.   gImesPlugIn.m_imes->cam->declenchement(0);
  14.   image = DM::IntegerImage("IMES live", 2, false, sx, sy );
  15.   {
  16.    // prepare to manipulate the data..
  17.    GatanPlugIn::ImageDataLocker imageL( image );
  18.    uint16 *data = (uint16 *) imageL.get();
  19.    // manipulate the data...
  20.    for ( long c = sx * sy; c > 0; --c)
  21.    {
  22.     *(data++) = (uint16) 0;
  23.    }
  24.    // tell DigitalMicrograph the image is changed...
  25.    image.DataChanged();
  26.    DM::ShowImage(image);
  27.    gImesPlugIn.listener = new IMESListener(image);
  28.   }
  29.   break;
  30.  case 1:
  31.   break;
  32. }
  33. PLUG_IN_EXIT
  34. // 'CImage' reference counts the image, deleting it when no more references exist.
  35. // To return the image from a script function, we must release the reference using
  36. // 'release()'.  Note that the 'ImageDataLocker' must be destroyed before 'release()'
  37. // is called.
  38. return image.release();
  39. }


 
Ca c'est la déclaration des fonctions, dans le meme fichier, en dehors des classes (d'ou leur appartenance au dossier globals)
 

Code :
  1. void SetArea(short xd, short xf, short yd, short yf);
  2. void GetImageSize(short *x, short *y);
  3. void UpdateImage(const Gatan::DM::Image &image);
  4. DM_ImageToken_1Ref StartAcquire(short mode);
  5. bool StopAcquire();
  6. bool SetPose(float time);
  7. float GetPose(void);


Message édité par backdafuckup le 04-06-2003 à 10:02:38
Reply

Marsh Posté le 04-06-2003 à 11:13:10    

:hot:
 
Petit up tout doux, j'en ferais un dans l'après midi...

Reply

Marsh Posté le 04-06-2003 à 11:16:08    

c quoi ce "DM_ImageToken_1Ref" avant StartAcquire() ?
Ou est passé le "bool" de la déclaration de cette fonction ?

Reply

Marsh Posté le 04-06-2003 à 11:20:27    

El_gringo a écrit :

c quoi ce "DM_ImageToken_1Ref" avant StartAcquire() ?
Ou est passé le "bool" de la déclaration de cette fonction ?


Comme je te l'ai dis, c'est pas moi qui ait programmé la base de cette dll...
DM_ImageToken_1Ref semble etre une référence à une image du logiciel (DigitalMicrograph = DM)
 
Il faut un bool ?

Reply

Marsh Posté le 04-06-2003 à 12:15:22    

backdafuckup a écrit :


Comme je te l'ai dis, c'est pas moi qui ait programmé la base de cette dll...
DM_ImageToken_1Ref semble etre une référence à une image du logiciel (DigitalMicrograph = DM)
 
Il faut un bool ?


 
Non, j'en sais rien. J'avais mal lu la déclaration, désolé.

Reply

Marsh Posté le 04-06-2003 à 14:14:29    

ce que je comprends pas, c'est pourquoi il me dit que, à cause de mon appel, la fonction est redéfinie, mais différement... Alors qu'apparement, tout colle... Je commence à croire que la personne qui a programmé ca ne savait pas ce qu'elle faisait... :/

Reply

Marsh Posté le 04-06-2003 à 14:14:29   

Reply

Marsh Posté le 04-06-2003 à 14:27:33    

Au fait, dans la copie d'écran que tu as mis au début, tout ce code qu'on voit est dans "Imes.h" !???

Reply

Marsh Posté le 04-06-2003 à 14:28:52    

El_gringo a écrit :

Au fait, dans la copie d'écran que tu as mis au début, tout ce code qu'on voit est dans "Imes.h" !???


Oui, c'est le code de la classe MenuCaméra. Je ne sais pas pourquoi je l'ai mis la dès le départ, mais maintenant, dès que je le mets ailleurs (en faisant attention bien sur) j'ai 102 ou 103 erreurs de compilation !
 
la je suis en train d'essayer de recréer un nouveau projet en essayant de tout rassembler...


Message édité par backdafuckup le 04-06-2003 à 14:29:26
Reply

Marsh Posté le 04-06-2003 à 14:34:33    

backdafuckup a écrit :


Oui, c'est le code de la classe MenuCaméra. Je ne sais pas pourquoi je l'ai mis la dès le départ, mais maintenant, dès que je le mets ailleurs (en faisant attention bien sur) j'ai 102 ou 103 erreurs de compilation !
 
la je suis en train d'essayer de recréer un nouveau projet en essayant de tout rassembler...


 
Nan, mais attends; en principe, t'as un .h et un .cpp par classe.
Genre MenuCamera.cpp et MenuCamera.h
Dans un .h, t'es jamais censé mettre de code, mais uniquement les déclarations. C'est dans le .cpp que tu mets le code.

Reply

Marsh Posté le 04-06-2003 à 14:40:29    

El_gringo a écrit :


 
Nan, mais attends; en principe, t'as un .h et un .cpp par classe.
Genre MenuCamera.cpp et MenuCamera.h
Dans un .h, t'es jamais censé mettre de code, mais uniquement les déclarations. C'est dans le .cpp que tu mets le code.


je sais, et c'est pour cela que j'ai fait un menucamera.cpp et .h
Le seul problème est que je n'arrive pas à rassembler ces foutus projets.
Je te l'ai dit, ce projet a une architecture affreuse ! Et je n'ai rajouté qu'une seule classe !!!
 
Soit je n'ai aucune logique, soit je suis fou !!!

Reply

Marsh Posté le 04-06-2003 à 14:40:38    

El_gringo a écrit :


 
Nan, mais attends; en principe, t'as un .h et un .cpp par classe.
Genre MenuCamera.cpp et MenuCamera.h
Dans un .h, t'es jamais censé mettre de code, mais uniquement les déclarations. C'est dans le .cpp que tu mets le code.


 
Tu peux mettre du code dans le .h, ca permet de faire des fonction inline de façon implicite (et puis pour les templates t'as pas trop le choix :)).


---------------
Le Tyran
Reply

Marsh Posté le 04-06-2003 à 14:53:19    

Comment fait on pour ajouter des fichiers dans "external dependencies" ?


Message édité par backdafuckup le 04-06-2003 à 14:53:27
Reply

Marsh Posté le 04-06-2003 à 14:56:40    

backdafuckup a écrit :

Comment fait on pour ajouter des fichiers dans "external dependencies" ?


 
T'as pas à en rajouter, justement, ça référence les fichiers qui ne sont pas à proprement parler DANS le projet, mais qui sont utilisé par celui-ci quand même.

Reply

Marsh Posté le 04-06-2003 à 14:57:38    

Bon, en fait j'ai réussi à ajouter des fichiers dans external dependencies.
Mais je n'arrive pas refaire un projet.
 
Je n'ai jamais fait de dll, donc ca m'est difficile de concevoir du premier coup une telle chose.
De plus je n'ai pas le temps de me consacrer à la lecture d'un tel thème....
 
Il faut donc que je trouve une solution avec ce projet...

Reply

Marsh Posté le 04-06-2003 à 15:43:22    

Ben, trouve...

Reply

Marsh Posté le 04-06-2003 à 15:48:02    

El_gringo a écrit :

Ben, trouve...


Vous n'avez vraiment aucune idée ???
 
Pourquoi le compilo dit il que les fonctions sont redéfinies ? C'est un doublen "include" ?

Reply

Marsh Posté le 04-06-2003 à 16:06:34    

backdafuckup a écrit :


Vous n'avez vraiment aucune idée ???
 
Pourquoi le compilo dit il que les fonctions sont redéfinies ? C'est un doublen "include" ?


 
Pour éviter les risques de double include, tu fais:

Code :
  1. #ifndef IMES_H
  2. #define IMES_H
  3. // Tous tes trucs
  4. #endif  // IMES_H (commentaire pour la forme)

Reply

Marsh Posté le 05-06-2003 à 09:40:54    

El_gringo a écrit :


 
Pour éviter les risques de double include, tu fais:

Code :
  1. #ifndef IMES_H
  2. #define IMES_H
  3. // Tous tes trucs
  4. #endif  // IMES_H (commentaire pour la forme)

 


 
comme d'hab, on rappelle que mettre le nom du fichier _H, c'est bien beau, mais c'est rarement suffisant.
 
Il vaut mieux faire une jolie décoration style :
MONNOM_LADATE_LEPROJET_LEFICHIER_H pour être sur de ne jamais tomber sur quelqu'un qui aurait fait le même define ...
 
Edit : faute de frappe


Message édité par theshockwave le 05-06-2003 à 09:41:17

---------------
last.fm
Reply

Marsh Posté le 05-06-2003 à 09:50:20    

Alors je ne sais pas ce que j'ai fait, mais j'ai une autre erreur.. qui m'inquiete plus :  
 
http://banguy.free.fr/AideClasse.jpg
 
 
Voila, apparement il me fait une fatal_error sur la ligne  
 

Code :
  1. #error "client non compatible with library version"


 
ou un truc du genre...
 
Apparement ma version de librairie serait trop vieille ou trop récente... Pourtant je ne l'ai pas changée...

Reply

Marsh Posté le 05-06-2003 à 11:12:48    

grimpe topic, grimpe.... :hot:  :bounce:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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