IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

déclaration de fonctions externes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut déclaration de fonctions externes
    Bonjour à tous!
    Je me posais une question vis à vis des déclarations de fonctions externes dans les fichiers d'en-têtes.
    Les templates doivent se déclarer dans la fonction principale, sous peine de ne pas être reconnue à l'édition des liens. (cf astuce de la FAQ)

    Comment dois-je déclarer la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    CImgl <unsignedshort> importData (int numchoc, int camera, long image_deb, long image_fin) {
    
    int cr;
    unsignedshort *Images=NULL;
    CImgl <unsignedshort> liste;
    cr = IRimages(36181,1L,100L,120L,&Images);
    if (cr != 0) {
           std::cout << "erreur de communication avec le serveur" << std::endl;
    }
    else {
        for (int i=0; i<20; i++) {
                   CImg <unsignedshort> image (&Images[i*77120], 320, 241, 1, 1);
                  liste.push_back(image);
           }
    free(Images);
     
    liste.back().equalize_histogram();
    liste.back().display();
     
    return liste;
           }
    }
    
    pour qu'elle soit correctement reconnue à l'édition des liens...

    J'admet que je suis un peu perdu, car je suis dans un projet C++, qui utilise des fonctions C et libraries C, ainsi des fichiers .cpp ou se mêlent fonctions template et fonctions classiques...

    J'aurai grand besoin de votre éclaircissement !

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    si tu utilises des librairies et des fonctions C dans un programme C++... c'est pas du C++, c'est du C/C++ et c'est pas super terrible (c'est du C++ pas propre quoi)

    pour ta fonction, ce n'est pas une fonction template, elle renvoie un type qui est un type avec template, mais dans la signature de la fonction, tous les types sont entièrement définis, donc cette fonction peut être déclarée comme n'importe quelle autre fonction classique...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Swoög
    si tu utilises des librairies et des fonctions C dans un programme C++... c'est pas du C++, c'est du C/C++ et c'est pas super terrible (c'est du C++ pas propre quoi)
    oui, je sais que c'est pas propre, le truc, c'est que j'ai découvert la STL en cours de programmation de ce gros projet...
    Et puis, certaines fonctions sont en C car sont utilisés par mes collègues sous Unix pour du temps-réel.
    Il faudrait que je recode tout, mais c'est long...

    Par contre, je ne comprend pas, je l'ai effectivement déclaré comme une fonction classique, et le link ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    main.obj : error LNK2001: symbole externe non résolu "struct cimg_library::CImgl<unsigned short> __cdecl importData(int,int,long,long)" (?importData@@$$FYA?AU?$CImgl@G@cimg_library@@HHJJ@Z)
    
    Merci Swoög pour tes réponses!!!

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    "undefined reference"... j'aurais compris... mais "unresolved extern symbol" là... je vois pas...

    ta fonction est compilée à part du main ? tu as toujours accès au template (et à son code) quand tu appels ou compil la fonction ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Swoög
    ta fonction est compilée à part du main ? tu as toujours accès au template (et à son code) quand tu appels ou compil la fonction ?
    Oui ma fonction est compilée à part du main dans un fichier analyse.cpp

    Mon main donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // d'autres fichiers de déclaration
    
    #include <list>
    #include <algorithm>
    #include <iostream>
    #include "CImg.h" // accès au template
    using namespace cimg_library;
     
    #include "quadrillage.h"
    #include "warping.h"
    #include "masque.h"
    #include "outils.h"
    #include "choixzone.h"
    #include "analyse.h"
    
    extern CImgl <unsigneds hort> importData (int numchoc, int camera, long image_deb, long image_fin); // déclaration de la fonction
     
    int main() {
    //etc ....
    

    Je comprend vraiment pas.

    Merci pour ton coup de main

  6. #6
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    si ta fonction est dans le analyse.cpp et que tu inclus analyse.h (je suppose que tu la déclares dans analyse.h) pas besoin de mettre la déclaration où tu la spécifie comme externe...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est à l'édition des liens qu'il y a un souci. Il n'y a aps une bibliothèque à lier avec ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/04/2006, 16h08
  2. [PHP][Javascript] PB avec appel de fonctions externes, HELP!
    Par chaser_T dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/04/2006, 16h44
  3. Réponses: 6
    Dernier message: 20/11/2005, 02h53
  4. [JS] Problème déclaration de fonction
    Par glloq8 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/09/2005, 10h22
  5. Réponses: 13
    Dernier message: 20/06/2005, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo