2012-04-10 12 views
-1

Ich habe eine C++ überladene Funktion und eine seiner Varianten erhält eine Wstring als Parameter, aber wenn ich es wie myfunc(L"Some text") nennen, beschwert sich der Compiler, dass es keine Variante der Funktion, die akzeptiert wchar_t *.Instantiate C++ - Funktion mit Wstring anstelle von wchar_t

Was soll ich tun?

SPÄTER EDIT:

Lucru(); 
Lucru(short,short,short,short,wstring,wstring,wstring,wstring,wstring,wstring); 

Dies ist, wie die Funktion in ihrer Erklärung sieht. Da dies schon sagt, ist es eine Konstruktorfunktion für eine Klasse ...

+2

'myfunc (std :: wstring (L" Irgendein Text "));'? – cHao

+1

Funktioniert gut für mich. Welchen Compiler benutzen Sie? Was ist die genaue Fehlermeldung? Welche anderen Überladungen hat "myfunc"? Können Sie ein vollständigeres Beispiel veröffentlichen? –

+0

Der [std :: basic_string-Konstruktor] (http://en.cppreference.com/w/cpp/string/basic_string/basic_string), der einen Zeichenzeiger akzeptiert, ist nicht explizit, also 'myfunc (L" Irgendein Text ") 'sollte funktionieren. Bitte posten Sie Ihre Funktionssignaturen und ein Beispiel dafür, wie Sie es aufrufen. [Hier ist] (http://ideone.com/My7iK) ein Beispiel. – Praetorian

Antwort

3

die breite Zeichenfolge Construct explizit:

myFunc(std::wstring(L"text")); 
+0

Ich bin so eine dumme Nudel, ja, das war es ... –

+3

@PetruDimitriu: Das kann nicht "es" gewesen sein. Der Konstruktor für 'std :: wstring' ist implizit, also sollte' myFunc (L "text") 'auch funktionieren, vorausgesetzt, dass' myFunc' tatsächlich deklariert ist, ein 'wstring' Argument zu nehmen. –

+0

Ich habe gerade den Code in der obigen Frageaussage gepostet. Nichts Besonderes. –

1

Ändern Sie die Funktion wstring Werte durch konstante Referenz zu akzeptieren:

Lucru(short,short,short,short,const wstring&,const wstring&,const wstring&,const wstring&,const wstring&,const wstring&);