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 :

Variable globale et m�thodes ?


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Ing�nieur Etudes
    Inscrit en
    Juillet 2010
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur Etudes

    Informations forums :
    Inscription : Juillet 2010
    Messages : 54
    Par d�faut Variable globale et m�thodes ?
    Bonjour,

    Dans le cadre d'un projet perso, je souhaite utiliser une biblioth�que externe, la Orfeo Toolbox pour ceux qui veulent savoir.

    J'utilise une m�thode d'un pointeur sur un objet d'une classe de cette biblioth�que externe pour lire un fichier.
    L'argument attendu est un std::string, que je mets donc.

    Et l� PAF! � l'ex�cution : SIGABRT.

    Bizarrement par contre, quand je met une variable globale en argument, aucune erreur de rencontr�e.

    Quelque chose m'a �chapp�e mais quoi ?

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Bonjour,

    Peut-�tre que quelque chose t'a �chapp�. Avec un extrait du code (avec tous les types utilis�s) on pourrait surement t'aider. D'autant que la phrase "J'utilise une m�thode d'un pointeur sur un objet d'une classe ..." me laisse perplexe.

  3. #3
    Membre averti
    Homme Profil pro
    Ing�nieur Etudes
    Inscrit en
    Juillet 2010
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur Etudes

    Informations forums :
    Inscription : Juillet 2010
    Messages : 54
    Par d�faut
    Voici un extrait de mon code :

    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
    25
    26
    27
    28
    29
     
    #include <iostream>
    #include "Access.h"
    #include "otbImageFileReader.h"
    #include "itkImageRegionIterator.h"
    #include <armadillo>
    #include "H5Cpp.h"
     
    using namespace H5;
     
     
    const H5std_string	FILE_NAME("spectraMoffetROI.h5");
    const H5std_string	GROUP_NAME("lib dataset");
    std::string FILE_NAME_IMAGE("../cupriteSubHsi.tif");
    void readImage(const std::string fname, typename otb::VectorImage<double, 2>::Pointer image);
    int main()
    {
        //reading image
        const unsigned int d = 2;
        using PixelType = double;
        using ImageType = otb::VectorImage<PixelType, d>;
        using ReaderType = otb::ImageFileReader<ImageType>;
        typename ReaderType::Pointer reader = ReaderType::New();
        std::string fname = "../cupriteSubHsi.tif";
        reader->SetFileName(fname); // SIGABRT
        reader->SetFileName(FILE_NAME_IMAGE); // MARCHE PARFAITEMENT
     
    //etc..
    }
    Et la fonction appel�e, qu'on trouve sur le doxygen de OTB

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    template <class TOutputImage, class ConvertPixelTraits>
     void ImageFileReader<TOutputImage, ConvertPixelTraits>::SetFileName(const std::string& extendedFileName)
     {
       const std::string skip_geom_key = "skipgeom";
       const std::string geom_key      = "geom";
     
       // First, see if the simple filename has changed
       typename FNameHelperType::Pointer helper = FNameHelperType::New();
     
       helper->SetExtendedFileName(extendedFileName);
       std::string simpleFileName = helper->GetSimpleFileName();
     
       if (simpleFileName == this->m_FileName)
       {
         // Then, see if the option map changed
         const typename ExtendedFilenameHelper::OptionMapType& newMap = helper->GetOptionMap();
         const typename ExtendedFilenameHelper::OptionMapType& oldMap = m_FilenameHelper->GetOptionMap();
     
         // Both maps are not completely the same
         if (oldMap.size() != newMap.size() || !std::equal(oldMap.begin(), oldMap.end(), newMap.begin()))
         {
           this->Modified();
     
           // Now check if keywordlist needs to be generated again
           // Condition is: one of the old or new map has the skip_geom
           // key and the other does not
           // OR
           // one of the old or new map has the geom key and the other
           // does not
           // OR
           // both have the geom key but the geom value is different
           if ((oldMap.count(skip_geom_key) != newMap.count(skip_geom_key)) || (oldMap.count(geom_key) != newMap.count(geom_key)) ||
               ((oldMap.count(geom_key) && newMap.count(geom_key)) && oldMap.find(geom_key)->second != newMap.find(geom_key)->second))
           {
             m_KeywordListUpToDate = false;
           }
         }
       }
       else
       {
         this->m_FileName      = simpleFileName;
         m_KeywordListUpToDate = false;
         this->Modified();
       }
     
       m_FilenameHelper = helper;
     }
    Ca ne m'aide pas trop :/.

  4. #4
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    En effet, la seule diff�rence est l'utilisation d'une locale au lieu d'une globale.
    Je pense que �a pourrait venir d'une incompatibilit� de m�thode d'appel de fonction. La biblioth�que doit imp�rativement �tre compil�e avec la m�me version de biblioth�que de base que l'application, sinon �a peut provoquer des anomalies. Je ne vois que �a comme piste possible.

  5. #5
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Le code prend un const& et en fait une copie interne.
    Je pense que ton probl�me vient d'ailleurs et tu as juste de la chance de pouvoir le repro en utilisant une variable locale.
    Le debugger sera certainement plus utile.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  6. #6
    Membre averti
    Homme Profil pro
    Ing�nieur Etudes
    Inscrit en
    Juillet 2010
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur Etudes

    Informations forums :
    Inscription : Juillet 2010
    Messages : 54
    Par d�faut
    Citation Envoy� par dalfab Voir le message
    En effet, la seule diff�rence est l'utilisation d'une locale au lieu d'une globale.
    Je pense que �a pourrait venir d'une incompatibilit� de m�thode d'appel de fonction. La biblioth�que doit imp�rativement �tre compil�e avec la m�me version de biblioth�que de base que l'application, sinon �a peut provoquer des anomalies. Je ne vois que �a comme piste possible.
    Tu veux dire que je dois refaire la compilation � la main de l'API que j'ai t�l�charg� ?

    Dans mon CMakeLists, j'ai d� r�activer l'ABI (qui �tait d�sactiv�e dans le CMakeList de cette biblioth�que externe), autrement il y avait incompatibilit� entre la biblioth�que HDF5 et l'OTB (les fonctions HDF5 n'�taient pas reconnus lors du linkage).

    Citation Envoy� par Bousk Voir le message
    Le code prend un const& et en fait une copie interne.
    Je pense que ton probl�me vient d'ailleurs et tu as juste de la chance de pouvoir le repro en utilisant une variable locale.
    Le debugger sera certainement plus utile.
    Sans doute, c'est bien pour �a que je viens ici parce que j'ai plus d'id�es :/.

  7. #7
    Membre averti
    Homme Profil pro
    Ing�nieur Etudes
    Inscrit en
    Juillet 2010
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur Etudes

    Informations forums :
    Inscription : Juillet 2010
    Messages : 54
    Par d�faut
    Bonjour,

    juste pour dire qu'il fallait que je remette l'abi � 0 pour que �a marche...et surtout que je compile les sources moi m�me, en choisissant notamment de pas utiliser les sources pour lecture des hdf5...parfois effectivement, il faut compiler soi m�me la biblioth�que externe.

    Du coup c'est r�solu.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 6
    Dernier message: 20/12/2011, 08h46
  2. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    R�ponses: 6
    Dernier message: 26/09/2003, 17h20
  3. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    R�ponses: 3
    Dernier message: 17/06/2003, 19h22
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    R�ponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    R�ponses: 8
    Dernier message: 27/04/2002, 08h34

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