'MessageBoxA':无法将参数 2 从 'std::vector<_Ty>' 转换为 'LPCSTR'
'MessageBoxA' : cannot convert parameter 2 from 'std::vector<_Ty>' to 'LPCSTR'
以下代码有效:
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()] = '[=13=]'; // don't forget the terminating 0 "delete[] writable;"
int msgboxID = MessageBox(
NULL,
writable,
"Notice",
MB_OK
);
delete[] writable;
}
为了自动清理,我使用了以下信息:How to convert a std::string to const char* or 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('[=14=]');
int msgboxID = MessageBox(
NULL,
writable,
"Notice",
MB_OK
);
}
我收到此错误:
'MessageBoxA':无法将参数 2 从 'std::vector<_Ty>' 转换为 'LPCSTR'
您不能将向量作为 LPCSTR 传递,您必须这样做。使用:
&writable[0]
或:
writable.data()
相反。或者简单地使用 myString.c_str()
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
);
}
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
如果您仍然遇到问题,请在更改后 myString.c_str()。
试试这个,
转到项目的 Properties,然后在 Configuration Properties/Advanced 下,将字符集更改为 “未设置” 。这样,编译器就不会假定您需要默认选择的 Unicode 字符:
以下代码有效:
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()] = '[=13=]'; // don't forget the terminating 0 "delete[] writable;"
int msgboxID = MessageBox(
NULL,
writable,
"Notice",
MB_OK
);
delete[] writable;
}
为了自动清理,我使用了以下信息:How to convert a std::string to const char* or 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('[=14=]');
int msgboxID = MessageBox(
NULL,
writable,
"Notice",
MB_OK
);
}
我收到此错误: 'MessageBoxA':无法将参数 2 从 'std::vector<_Ty>' 转换为 'LPCSTR'
您不能将向量作为 LPCSTR 传递,您必须这样做。使用:
&writable[0]
或:
writable.data()
相反。或者简单地使用 myString.c_str()
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
);
}
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
如果您仍然遇到问题,请在更改后 myString.c_str()。 试试这个, 转到项目的 Properties,然后在 Configuration Properties/Advanced 下,将字符集更改为 “未设置” 。这样,编译器就不会假定您需要默认选择的 Unicode 字符: