[英]'MessageBoxA' : cannot convert parameter 2 from 'std::vector<_Ty>' to 'LPCSTR'
The following code works:以下代码有效:
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;
}
To clean up automatically I used info from: How to convert a std::string to const char* or char*?为了自动清理,我使用了以下信息: How to convert a std::string to const char* or char*? .
.
The following code throws an error:以下代码会引发错误:
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
);
}
I'm getting this error: 'MessageBoxA': cannot convert parameter 2 from 'std::vector<_Ty>' to 'LPCSTR'我收到此错误: “MessageBoxA”:无法将参数 2 从“std::vector<_Ty>”转换为“LPCSTR”
You cannot pass a vector as LPCSTR, you must. 您不能像LPCSTR那样传递矢量,必须这样做。 Use:
采用:
&writable[0]
or: 要么:
writable.data()
instead. 代替。 Or simply use
myString.c_str()
或者只是使用
myString.c_str()
MessageBox
takes a const char*
. MessageBox
采用const char*
。 You don't need to copy the string first for that. 您无需为此先复制字符串。 Simply use
c_str
: 只需使用
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
);
}
Note that I think your API is poor: you are modifying the value of the string passed in. Usually the caller wouldn't be expecting that. 请注意,我认为您的API很差:您正在修改传入的字符串的值。通常,调用者不会期望这样。 I think your function should look like this instead:
我认为您的函数应如下所示:
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
);
}
Thanks everyone & @Falcon 谢谢大家和@Falcon
If you still face a problem, after changing it myString.c_str().如果您仍然遇到问题,请在更改 myString.c_str() 之后。 Try this, Go to the Properties for your Project and under Configuration Properties/Advanced , change the Character Set to "Not Set" .
试试这个, Go 到您的项目的属性,并在Configuration Properties/Advanced下,将 Character Set 更改为"Not Set" 。 This way, the compiler will not assume that you want Unicode characters, which are selected by default:
这样,编译器就不会假定您需要 Unicode 个字符,这些字符是默认选中的:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.