Burada sorun türleridir. böylece
s = "hai! " + s;
aslında bir sorundur, (genellikle bir const char*
olan) bir wstring bir dize değil, ama bir alıntı dize sabiti buna bağlıdır.
"hai! "
değeri, const char*
türünde değil, const wchar_t*
türünde değil. const char*
temel bir tür olduğu için, const char*
ve wstring
çalışan bir global operator+
arıyor. Ayrıca,(std::basic_string<T>
, the template underyling type for both string
and wstring
(sırasıyla char
ve wchar_t
öğesinin tür parametresi kullanılarak), const wchar_t*
ve wstring
için bir tane bulabilir ve ek olarak operator+ (const T*& s1, const basic_string<T> s2)
için şablon yöntemleri oluşturur.
Bu nedenle, yapmak gereken bir wstring "hai!": Bu nedenle
std::wstring class::something(wchar_t* input){
std::wstring s(input);
s = L"hai! " + s;
return s;
}
Visual C++ ile sabit bir dizeye L
önek, bu "uzun" olarak tanımlar ve bir wstring. wstring
is actually basic_string<wchar_t>
, C++ şablonlarının davranışı nedeniyle, basic_string<char>
'dan (std::string
) tamamen farklı bir tür olduğundan, ikisini birleştiremezsiniz. Bunun yerine (multi-byte için geniş için 1 ve 1) 2 kod versiyonlarını sahip
"Değer" hai! msgstr "string std :: string ..." ifadesi yanlış bir ifadedir. Gerçek tip 'char const *' dır. "Visual C++ 'da bir dize sabitindeki L öneki," uzun "ve" wstring "olarak tanımlanır," üç şekilde de yanlıştır. İlk olarak, VC++ için spesifik değil. İkincisi, "geniş" değil, "uzun" olarak tanımlar. Üçüncü olarak, bir wstring değil, bir 'wchar_t const *'. –
Oldukça doğru. Bunu siz yazarken ve cevabımı aynı anda düzenlerken farkettim. Ben bir wchar_t const *, sadece bir wchar_t const * değil bir const olduğunu düşündüm rağmen? Hangi ben yanlış olarak const yerine, ben sadece yanlış yanlış yerine sadece yanlış tür olduğunu, düzeltmek için tekrar düzenlemek istiyorum emin wchar_t *, const olarak yazdım. –