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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

+ 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