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 :

std::string ou const char*


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Par d�faut std::string ou const char*
    Bonjour

    J'ai une fonction d�fini comme:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    long createInputVectorSignal( in string signalNameCorba )


    Lors de la compilation, j'ai l'erreur:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    no matching function for call to 'hppCorbaServer::_objref_SOT_Server_Command::createInputVectorSignal(std::string)'  
    ./ServerCommand.hh:451: note: candidates are: CORBA::Long hppCorbaServer::_objref_SOT_Server_Command::createInputVectorSignal(const char*)
    Pourquoi il demande que ce soit const char* .. meme qu'il doit etre std::string??!!
    Merci d'avance pour votre r�poonse...


    P.S:
    cette fonction est utilis�e dans mon programme dans cette partie:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #define INIT_SIN(name) \
      name  \
        = serverPtr->createInputVectorSignal( setSigName( #name,signame,"in" )); 
     
    %avec:
     
    static std::string setSigName( const std::string& buffer, const string& signame,const std::string & IO )
    {
      const string sigref = "Teleop-Distant::"+IO+"put(vector)::";
      string sigfullname = sigref + buffer;
      return sigfullname;
    }

  2. #2
    Membre Expert
    Avatar de m�phistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par d�faut
    Citation Envoy� par amineabm Voir le message
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    long createInputVectorSignal( in string signalNameCorba )
    Le C++ ce n'est pas du C#. J'ignore pourquoi il laisse passez le "in" mais normalement, il ne devrait pas le faire.

    essaye en d�clarant ta fonction comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    long createInputVectorSignal(const  string  & signalNameCorba )

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Par d�faut
    Je ne peux pas changer la fonction, car c'est une fonction d'une structure d'un fichier .idl (j'utilise le corba pour faire la communication entre serveur et client)...

    Je ne peux pas changer mon programme sans toucher a la fonction??!!

  4. #4
    Membre Expert
    Avatar de m�phistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par d�faut
    ha... je ne connais pas cobra, mais il est rare que les interfaces entre diff�rents langages se fassent par le moyen de types �volu�s (ie: le string que tu vois dans le fichier est plutot un cstring, mais en aucun cas un string C++)

    Tu peux donc essayer de bien lui passer un char*.
    Pour cela, utilise l'attribut c_str():
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    serverPtr->createInputVectorSignal( setSigName( #name,signame,"in" ).c_str());

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Par d�faut
    Lorsque je fait ca , le programme compile mais quand je le lance il donne une erreur de segmentation et le debug donne:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    Program received signal SIGSEGV, Segmentation fault.
    0x0804e50f in hppCorbaServer::_objref_SOT_Server_Command::createInputVectorSignal (this=0x0, signalNameCorba=0x8069044 "Teleop-Distant::input(vector)::Com")
        at ServerCommandSK.cc:639
    639	  _invoke(_call_desc);
    Le fichier de la fonction n'est pas en C++?!!, c'est quoi la diff�rence entre les deux string ?!!

  6. #6
    Membre Expert
    Avatar de m�phistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par d�faut
    d'apr�s ton message d'erreur, la segmentation fault se produit dans ta fonction cobra... il faudrait voir comment elle fonctionne pour savoir � quoi c'est d� ...
    L� dessus je ne peux pas t'aider plus.

    les cstring ce sont les const char* et les string style C++ sont les std::string. quand au string de Cobra, je n'ai aucune id�e de ses propri�t�s.

    Cordialement

  7. #7
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    this=0x0, c'est rare que �a soit une bonne nouvelle (quand au "in", c'est certainement un #define vers rien ; ceci dit, �a rend le code plus lisible selon certains).

    serverPtr est NULL. D'o� l'erreur.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Par d�faut
    Dans le code avant, il y a un test sur serverPtr, il n'est pas NULL.

    Comment r�soudre cette erreur alors?

    Cette fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    long createInputVectorSignal( in string signalNameCorba )
    prend un string ou un char*?!!


    P.S:
    La structure generale du programme est:
    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
     
    static std::string setSigName( const std::string& buffer, const string& signame,const std::string & IO )
    {
      const string sigref = "Teleop-Distant::"+IO+"put(vector)::";
      string sigfullname = sigref + buffer;
      //const char nbCar = sigfullname.length(); 
      //signame.length(nbCar);
      //for( int i=0;i<nbCar;++i ){ signame[i]=sigfullname[i]; }
      return sigfullname;
    }
     
     
    #define INIT_SIN(name) \
      name  \
        = serverPtr->createInputVectorSignal( setSigName(#name,signame,"in" ).c_str()); 
     
     
    void main
    {
    const string signame; 
     
    INIT_SIN(Com);
    }

  9. #9
    Membre Expert
    Avatar de m�phistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par d�faut
    Citation Envoy� par Emmanuel Deloget Voir le message
    this=0x0, c'est rare que �a soit une bonne nouvelle
    il me semble que cela peut arriver quand une classe n'a qu'une seule instance: en effet, je sais que certains compilos optimisent les r�f�rences internes en r�duisant leur champ relativement � la classe lorsqu'aucun objet externe ne peut �tre r�f�renc� (d'ou des probl�mes de tailles de r�f�rences parfois impr�dictible) donc �a ne me parairais pas du tout impossible rare que le compilo optimise le pointeur this transmis aux m�thodes de fa�on � ce qu'il soit relatif � la premi�re instance.
    Toutefois �a n'a pas l'air d'�tre le cas ici.

    Citation Envoy� par amineabm Voir le message
    Dans le code avant, il y a un test sur serverPtr, il n'est pas NULL.
    [...]
    La structure generale du programme est:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #define INIT_SIN(name) \
      name  \
        = serverPtr->createInputVectorSignal( setSigName(#name,signame,"in" ).c_str()); 
    
    
    void main
    {
    const string signame; 
    
    INIT_SIN(Com);
    }
    Heu il est d�clar� ou serverPtr? pas dans ton main en tout cas . Si c'est une globale, peut-on voir sa d�claration ?

    Merci.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Par d�faut
    La declaration de ServerPtr:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
      hppCorbaServer::SOT_Server_Command_var serverPtr;
    avec:
    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
     
    // OMG IDL
    module hppCorbaServer
    {
      typedef sequence<double> DoubleSeq;
      typedef sequence<char> StringStreamer;
     
      interface NotifyCallback{
        //oneway
        void notifyClient();
      };
     
      interface SOT_Server_Command
      {
        void run( in string cmd );
        void runAndRead( in string cmd, out StringStreamer os );
        void readVector( in string signalName, out DoubleSeq value );
     
        long createOutputVectorSignal( in string signalNameCorba );
        long createInputVectorSignal( in string signalNameCorba );
        void readInputVectorSignal( in long signalRank, out DoubleSeq value );
        void writeOutputVectorSignal( in long signalRank, in DoubleSeq value );
     
        // RegisterCallback
        void registerClient(in NotifyCallback client, in string clientName );
        void unregisterClient(in string clientName);
      };
     
    };

  11. #11
    Membre tr�s actif
    Profil pro
    professeur des universit�s � la retraite
    Inscrit en
    Ao�t 2008
    Messages
    364
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : professeur des universit�s � la retraite

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 364
    Par d�faut
    Il s'agit bien de
    Corba
    et non de cobra, comme le supposaient certains... ! du moins � ce qu'il semble...

    http://fr.wikipedia.org/wiki/Common_...r_Architecture

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Par d�faut
    Merci pour votre remarque.

    Mais vous avez une solution pour mon probl�me?!!
    Merci pour votre aide.

  13. #13
    Membre Expert
    Avatar de m�phistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par d�faut
    Citation Envoy� par amineabm Voir le message
    La declaration de ServerPtr:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
      hppCorbaServer::SOT_Server_Command_var serverPtr;
    non, je voulais dire ou par rapport au reste: je voudrais �tre s�r que ta variable est instanci�e et accessible lors de ton erreur.

  14. #14
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    J'aimerais avoir une solution, mais je n'ai pas assez d'informations pour �a. Il nous faudrait le code de cr�ation du serverPtr, ainsi que le code dans lequel se fait l'appel.

    A noter que normallement, tu devrais pouvoir debogguer ce probl�me relativement simplement, en pla�ant des points d'arr�t judicieusement.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Par d�faut
    Merci pour votre aide.

    C'�tait bien le probl�me de d�claration de ServerPtr dans la fonction utilis�e.

    Merci.

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

Discussions similaires

  1. conversion const std::string et const char * ?
    Par panthere noire dans le forum C++
    R�ponses: 7
    Dernier message: 28/02/2011, 15h51
  2. Conversion const char* vers std::string
    Par scheme dans le forum C++
    R�ponses: 4
    Dernier message: 21/09/2010, 11h02
  3. R�ponses: 4
    Dernier message: 28/01/2010, 11h28
  4. std::string en const WCHAR*
    Par caradhras dans le forum Langage
    R�ponses: 5
    Dernier message: 26/06/2009, 16h21
  5. Convertir String^ en const char*
    Par Sixdeux dans le forum C++/CLI
    R�ponses: 3
    Dernier message: 22/05/2007, 09h58

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