Проблема здесь в типах. Wstring не является строкой, но к ней относится строковая константа в кавычках (обычно это const char*
), поэтому
s = "hai! " + s;
на самом деле проблема.
Значение "hai! "
имеет тип const char*
, а не тип const wchar_t*
. Поскольку const char*
является базовым типом, он ищет глобальный operator+
, который работает с const char*
и wstring
, который не существует. Он нашел бы один для const wchar_t*
и wstring
, потому что std::basic_string<T>
, тип подчиненного шаблона для обоих string
и wstring
(используя char
и wchar_t
в качестве параметра типа соответственно) также создает методы шаблона для operator+ (const T*& s1, const basic_string<T> s2)
, чтобы сложение могло работать.
Поэтому вам нужно сделать "hai!" Строкой:
std::wstring class::something(wchar_t* input){
std::wstring s(input);
s = L"hai! " + s;
return s;
}
Префикс L
для строковой константы в Visual C ++ определяет ее как «long» и, следовательно, wstring. wstring
на самом деле basic_string<wchar_t>
, который из-за поведения шаблонов C ++ совершенно отличается от basic_string<char>
(a std::string
), поэтому вы не можете объединить их.