2011-01-20 1 views

ответ

5

Нет, вы должны использовать возвращаемое значение из a_string.c_str() (который является const char*, что CString может понять).

+0

Спасибо миллион @Zac! Поэтому я думаю, что const не была проблемой, но на самом деле была std :: string в качестве параметра для CString :: Format(). Как получилось, что это скомпилировано ?! – Jonathan

+1

Если вы программируете более чем на пару дней, @Jonathan, вы узнаете, что многие вещи компилируются, даже если они не работают. Функция 'CString :: Format' принимает все свои параметры формата в аргументе' ... ', который принимает значения любого типа. Однако, когда значение имеет определенный пользователем тип класса (который включает в себя 'std :: string'), C++ Standard говорит, что поведение результирующей программы не определено. Формально, использование 'CString' без трансляции также не определено, но класс использует специальные трюки, чтобы убедиться, что он работает с любыми компиляторами, поддерживаемыми MFC. –

+0

Трудно поверить, что они подойдут для поддержки CString, но пренебрегают std :: string. Угадайте, только MS может это сделать ... – Jonathan

0

Вы можете конвертировать std::string в CString:

CString a_cstring(a_string.c_str()); 

Затем используйте a_cstring.

c_string.Format("%s %s!", a_cstring, b_string);