Я использую MFC TextOut для вывода текста на экран следующим образом
std::string myIntToStr(int number)
{
std::stringstream ss;//create a stringstream
ss << number;//add number to the stream
return ss.str();//return a string with the contents of the stream
}void MViewClass::DrawFunction()
{
CClientDC aDC(this);
// .. Drawing Code
aDC.TextOut(27, 50, ("my age is " + myIntToStr(23)).c_str());
}
Но я получаю сообщение об ошибке «невозможно преобразовать аргумент 3 из» const char * «в» const CString &«».
Документация для TextOut показывает перегрузку CString. Я хотел бы использовать CString с TextOut, поскольку он позволяет мне использовать мой конвертер myIntToStr. Какие-либо предложения?
Код использует std::string's
c_str, which returns
const char *, not
CString`. Пытаться
void MViewClass::DrawFunction()
{
CClientDC aDC(this);
CString s("my age is ");
s += myIntToStr(23).c_str();
// .. Drawing Code
aDC.TextOut(27, 50, s);
}
или просто использовать CString :: Format
void MViewClass::DrawFunction()
{
CClientDC aDC(this);
CString s;
s.Format("my age is %d", 23);
// .. Drawing Code
aDC.TextOut(27, 50, s);
}
Я предполагаю, что вы используете функцию myIntToStr
преобразовать int в строку в другом месте вашего кода, и что ваша текущая проблема заключается в том, как отобразить C ++ string
с TextOut.
Вы можете просто создать CString в стеке, инициализированном из std::string
сюда :
void MViewClass::DrawFunction()
{
CClientDC aDC(this);
// .. Drawing Code
CString age(("my age is " + myIntToStr(23)).c_str());
aDC.TextOut(27, 50, age);
}
Поскольку он создается в стеке, он автоматически исчезнет в конце метода, и вы не будете беспокоиться о распределении и освобождении.