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

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°415699
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 09:47:48  profilanswer
 

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
mood
Publicité
Posté le 04-06-2003 à 09:47:48  profilanswer
 

n°415702
LetoII
Le dormeur doit se réveiller
Posté le 04-06-2003 à 09:49:45  profilanswer
 

C deux DLL ou une seule tes deux projets?


---------------
Le Tyran
n°415703
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 09:51:49  profilanswer
 

LetoII a écrit :

C deux DLL ou une seule tes deux projets?


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

n°415712
El_gringo
Posté le 04-06-2003 à 09:58:01  profilanswer
 

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
n°415716
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 10:01:41  profilanswer
 

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
n°415857
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 11:13:10  profilanswer
 

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

n°415864
El_gringo
Posté le 04-06-2003 à 11:16:08  profilanswer
 

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

n°415870
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 11:20:27  profilanswer
 

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 ?

n°415952
El_gringo
Posté le 04-06-2003 à 12:15:22  profilanswer
 

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

n°416112
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 14:14:29  profilanswer
 

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... :/

mood
Publicité
Posté le 04-06-2003 à 14:14:29  profilanswer
 

n°416147
El_gringo
Posté le 04-06-2003 à 14:27:33  profilanswer
 

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

n°416153
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 14:28:52  profilanswer
 

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
n°416173
El_gringo
Posté le 04-06-2003 à 14:34:33  profilanswer
 

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.

n°416194
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 14:40:29  profilanswer
 

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 !!!

n°416198
LetoII
Le dormeur doit se réveiller
Posté le 04-06-2003 à 14:40:38  profilanswer
 

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
n°416225
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 14:53:19  profilanswer
 

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


Message édité par backdafuckup le 04-06-2003 à 14:53:27
n°416232
El_gringo
Posté le 04-06-2003 à 14:56:40  profilanswer
 

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.

n°416234
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 14:57:38  profilanswer
 

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

n°416344
El_gringo
Posté le 04-06-2003 à 15:43:22  profilanswer
 

Ben, trouve...

n°416353
backdafuck​up
Back to da old skool
Posté le 04-06-2003 à 15:48:02  profilanswer
 

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" ?

n°416413
El_gringo
Posté le 04-06-2003 à 16:06:34  profilanswer
 

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)

n°417283
theshockwa​ve
I work at a firm named Koslow
Posté le 05-06-2003 à 09:40:54  profilanswer
 

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
n°417299
backdafuck​up
Back to da old skool
Posté le 05-06-2003 à 09:50:20  profilanswer
 

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

n°417451
backdafuck​up
Back to da old skool
Posté le 05-06-2003 à 11:12:48  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
EasyPHP : Probleme de dateProblème d'auto incrémentation sous VB - Access
problème épineux[SQL sous ACCESS 97 ] problème de cumul
problème de variables dans fonction PHP[PHP] probleme louche
petit probleme...[Flash 5] Probleme d affichages ...
Probleme avec l'apostrophe avec la commande mailProbleme d'optimisation [php/mysql]
Plus de sujets relatifs à : [C++]Un problème de notions d'objet : redefinition de fonctions


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