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 :

[struct] Omission d'un paramètre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut [struct] Omission d'un paramètre
    Bonjour

    Je vais tâcher d'être le plus clair possible. Je développe une appli Java qui va effectuer des appels vers une librairie C++ que je développe parallèlement. A un moment, j'envoie une série de paramètres à cette librarie que je récupère correctement avec la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    JNIEXPORT void JNICALL Java_com_bioxpr_linkers_BeaconPCR_getLine(JNIEnv *env, jobject object, jint a, jobjectArray string){
      	const char *args[a];
    	for (int i=0; i<a; i++){
    		jstring jstr = (jstring)env->GetObjectArrayElement(string, i);
    		args[i] = env->GetStringUTFChars(jstr, 0);
    		std::cout << env->GetStringUTFChars(jstr, 0) << std::endl;
    	}
    	FindBeacon(a, args);
    }
    La sortie me montre qu'aucun de mes arguments ne manque. Je dispose d'une structure dans laquelle je range ces arguments :
    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
     
    struct ArgumentsB
    {
      std::string FileName;
      int Tm, TmTol, TaOpt, TaOptTol, MinLenAmp, MaxLenAmp;
      double HmdG3pEnd, HmdGIntern, SdmdG3pEnd, SdmdGIntern;
      int RmLen, GCclamp;
      double _3pEndmSdG;
      int MabinAmp, MppTmm;
      double CdmdG3pEnd, CdmdGIntern;
      int MinLenPrim, MaxLenPrim, MinGC, MaxGC;
      double PrimConc, MgConc, NaConc;
     
     
      bool Init(int argc, const char* argv[]);
      ArgumentsB(int argc, const char* argv[]);
    };
    Mon problème vient du fait qu'un seul argument n'est pas pris en compte, celui du FileName. Voici un extrait de code où je remplis ma structure :
    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
     
    bool ArgumentsB::Init(int argc, const char* argv[])
      {
        using namespace Args;
     
        ArgumentParser parser;
     
        parser.addArgument ( "-FileName", Argument(1, true) );
        parser.addArgument ( "-Tm", Argument(1, false) );
        parser.addArgument ( "-TmTol", Argument(1, false) );
        parser.addArgument ( "-TaOpt", Argument(1, false) );
        parser.addArgument ( "-TaOptTol", Argument(1, false) );
    	parser.addArgument ( "-MinLenAmp", Argument(1, false) );
        parser.addArgument ( "-MaxLenAmp", Argument(1, false) );
        parser.addArgument ( "-HmdG3pEnd", Argument(1, false) );
        parser.addArgument ( "-HmdGIntern", Argument(1, false) );
        parser.addArgument ( "-SdmdG3pEnd", Argument(1, false) );
        parser.addArgument ( "-SdmdGIntern", Argument(1, false) );
        parser.addArgument ( "-RmLen", Argument(1, false) );
        parser.addArgument ( "-GCclamp", Argument(1, false) );
        parser.addArgument ( "-3pEndmSdG", Argument(1, false) );
        parser.addArgument ( "-MabinAmp", Argument(1, false) );
        parser.addArgument ( "-MppTmm", Argument(1, false) );
    	parser.addArgument ( "-CdmdG3pEnd", Argument(1, false) );
        parser.addArgument ( "-CdmdGIntern", Argument(1, false) );
        parser.addArgument ( "-MinLenPrim", Argument(1, false) );
        parser.addArgument ( "-MaxLenPrim", Argument(1, false) );
        parser.addArgument ( "-MinGC", Argument(1, false) );
        parser.addArgument ( "-MaxGC", Argument(1, false) );
        parser.addArgument ( "-PrimConc", Argument(1, false) );
        parser.addArgument ( "-MgConc", Argument(1, false) );
        parser.addArgument ( "-NaConc", Argument(1, false) );
     
        if(!parser.Parse(argc, argv)) return false;
        {
          const Argument& arg=parser.getArgument("-FileName");
          FileName = arg.getValue(0);
        }
        {
          const Argument& arg=parser.getArgument("-Tm");
          if( arg.isInitiated() ) {
    	Tm=arg.getInteger(0);
          }
        }
    Alors que les autres paramètres sont correctement remplis, seul FileName reste vide.
    Où ai-je bien pû me tromper ?
    Merci d'avance de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Qu'entends-tu par "il est vide" ?

    Est-ce que ça n'aurait pas un rapport avec le fait qu'il soit en premier ? Ou qu'il soit le seul à avoir un argument ayant "true" comme second paramètre ?

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Salut Loulou

    Par vide, j'entendais que la string a une taille de 0. De toute évidence, il me semble que l'erreur est ailleurs, au niveau du parser de mes arguments.
    Mais si des idées vous arrivent, n'hésitez pas.
    @Loulou, c'est pas tous les jours que tu dois voir le responsable Perl faire du C++

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    C'est bon, :trouve:
    En fait, l'erreur venait de ma chaîne de caractère passé en argument principal. Il me manquait un tiret. Le parseur ne s'est ensuite pas retrouvé.
    C'était comme toutes les erreurs, une erreur de ballot !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Bah, ça nous arrive à tous
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. typedef et struct paramétrée
    Par coda_blank dans le forum Langage
    Réponses: 1
    Dernier message: 04/09/2010, 13h43
  2. Réponses: 4
    Dernier message: 21/06/2010, 01h19
  3. Réponses: 3
    Dernier message: 18/04/2007, 11h55
  4. Réponses: 4
    Dernier message: 11/09/2005, 01h21

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