2010-09-29 40 views
2

J'ai une méthode C++ qui prend une variable la signature de méthode est comme ceci:Comment passer une variable std :: string en fonction

DLL returnObject** getObject(const std::string folder = ""); 

J'ai essayé en passant:

const std::string myString = "something"; 

mais j'obtiens l'erreur suivante:

No matching function call to ... getObject(std::string&); 

J'ai quelques questions ici.

  1. Comment puis-je passer dans une chaîne std :: normale sans le dossier « = « » » « & »
  2. Cela ressemble à la valeur est facultative est-il? Et si oui, comment passez-vous un paramètre facultatif?
+4

Pouvez-vous s'il vous plaît nous montrer exactement comment vous avez essayé d'appeler la fonction 'getObject' avec le paramètre? Je parie que votre problème est là. –

+0

Salut j'ai essayé cela \t \t const std :: string folder = ""; \t \t className-> getObject (dossier); –

+0

Peut-être 'extern 'C" 'aiderait? –

Répondre

4

Ce petit exemple fonctionne comme prévu:

#include <stdio.h> 
#include <string> 

class foo { 
public: 
    void getObject(const std::string folder = ""); 
}; 

int main() 
{ 
    const std::string myString = "something"; 

    foo* pFoo = new foo; 

    pFoo->getObject(myString); 
    pFoo->getObject(); // call using default parameter 

    return 0; 
} 


void foo::getObject(const std::string folder) 
{ 
    printf("folder is: \"%s\"\n", folder.c_str()); 
} 

Vous pouvez poster un petit exemple de la même qui montre votre problème.

+0

Merci d'être stupide, la méthode avait en réalité plusieurs variables et je supposais juste que c'était la chaîne std :: qui était la cause du problème. –

+0

Oh mon dieu, la dernière fois que j'ai utilisé des E/S de style C dans une réponse en C++, je me suis fait prendre (ou était-ce une question ... je ne m'en souviens pas). +1 de toute façon. – dreamlax

1

Cette compilation bien pour moi, le comparer à ce que vous faites:

#include <string> 

void myFunc(const std::string _str) 
{ 
} 

int main() 
{ 
    const std::string str = "hello world"; 
    myFunc(str); 
    return 0; 
}