‘MessageBoxA’: невозможно преобразовать параметр 2 из ‘std :: vector & lt; _Ty & gt;’ в «ЛПЦСТР»

Следующий код работает:

void CMyPlugin8::myMessageBox(std::string& myString)
{
myString = "Received the following string\n" + myString;
char * writable = new char[myString.size() + 1];
std::copy(myString.begin(), myString.end(), writable);
writable[myString.size()] = '\0'; // don't forget the terminating 0 "delete[] writable;"
int msgboxID = MessageBox(
NULL,
writable,
"Notice",
MB_OK
);
delete[] writable;
}

Для автоматической очистки я использовал информацию из: Как преобразовать std :: string в const char * или char *?.

Следующий код выдает ошибку:

void CMyPlugin8::myMessageBox(std::string& myString)
{
myString = "Received the following string\n" + myString;
std::vector<char> writable(myString.begin(), myString.end());
writable.push_back('\0');

int msgboxID = MessageBox(
NULL,
writable,
"Notice",
MB_OK
);
}

Я получаю эту ошибку:
MessageBoxA: невозможно преобразовать параметр 2 из std :: vector<_Ty> ‘в’ LPCSTR ‘

0

Решение

MessageBox занимает const char*, Вам не нужно сначала копировать строку для этого. Просто использовать c_str:

void CMyPlugin8::myMessageBox(std::string& myString)
{
myString = "Received the following string\n" + myString;
int msgboxID = MessageBox(
NULL,
myString.c_str(),
"Notice",
MB_OK
);
}

Обратите внимание, что я думаю, что ваш API плох: вы изменяете значение передаваемой строки. Обычно вызывающая сторона не ожидала этого. Я думаю, что ваша функция должна выглядеть следующим образом:

void CMyPlugin8::myMessageBox(const std::string& myString)
{
std::string message = "Received the following string\n" + myString;
int msgboxID = MessageBox(
NULL,
message.c_str(),
"Notice",
MB_OK
);
}
2

Другие решения

Вы не можете передать вектор как LPCSTR, вы должны. Использование:

&writable[0]

или же:

writable.data()

вместо. Или просто использовать myString.c_str()

4

void CMyPlugin8::myMessageBox(const std::string& myString)
{
std::string message = "Received the following string\n" + myString;
int msgboxID = MessageBox(
NULL,
message.c_str(),
"Notice",
MB_OK
);
}

Спасибо всем & @Falcon

0
По вопросам рекламы [email protected]