'Initializing':无法从 'const wchar_t[35]' 转换为 'LPWSTR'
'Initializing': Cannot convert from 'const wchar_t[35]' to 'LPWSTR'
我正在学习C++,想换个桌面壁纸。但是我在上面收到这个错误。
#include <string>
#include <iostream>
#include <Windows.h>
using namespace std;
int main() {
LPWSTR test = L"C:\Users\user\Pictures\minion.png";
int result = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,
test, SPIF_UPDATEINIFILE);
}
“Const wchar_t*”类型的值不能用于初始化 LPWSTR 类型的实体
有什么想法吗?
谢谢
LPWSTR
是wchar_t*
的别名,即指向非常量字符的指针。
字符串文字是一个常量字符数组,在您的例子中是 const wchar_t[35]
。它衰减为指向常量字符的指针,指向文字中的第一个字符。
不能将指向常量的指针分配给指向非常量的指针。这将允许对只读存储器进行写访问。
改用 LPCWSTR
,这是 const wchar_t*
.
的别名
LPCWSTR test = L"C:\Users\user\Pictures\minion.png";
MSVC 编译器越来越宽松。总的来说,这是一件好事。
L"C:\Users\user\Pictures\minion.png"
是 const wchar_t[34]
类型的文字(额外的元素用于字符串终止符)。在某些情况下 衰减 到 const wchar_t*
指针。
LPWSTR
不是 const
指针类型,因此在标准 C++ 编译器上编译会失败。
解决方法是使用const
指针类型LPCWSTR
。
解决此编译错误的另一种方法是在项目属性 -> C/C++ -> 语言中将一致性模式设置为默认。至少它在我的 VS2019 项目中有效。
我正在学习C++,想换个桌面壁纸。但是我在上面收到这个错误。
#include <string>
#include <iostream>
#include <Windows.h>
using namespace std;
int main() {
LPWSTR test = L"C:\Users\user\Pictures\minion.png";
int result = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,
test, SPIF_UPDATEINIFILE);
}
“Const wchar_t*”类型的值不能用于初始化 LPWSTR 类型的实体
有什么想法吗?
谢谢
LPWSTR
是wchar_t*
的别名,即指向非常量字符的指针。
字符串文字是一个常量字符数组,在您的例子中是 const wchar_t[35]
。它衰减为指向常量字符的指针,指向文字中的第一个字符。
不能将指向常量的指针分配给指向非常量的指针。这将允许对只读存储器进行写访问。
改用 LPCWSTR
,这是 const wchar_t*
.
LPCWSTR test = L"C:\Users\user\Pictures\minion.png";
MSVC 编译器越来越宽松。总的来说,这是一件好事。
L"C:\Users\user\Pictures\minion.png"
是 const wchar_t[34]
类型的文字(额外的元素用于字符串终止符)。在某些情况下 衰减 到 const wchar_t*
指针。
LPWSTR
不是 const
指针类型,因此在标准 C++ 编译器上编译会失败。
解决方法是使用const
指针类型LPCWSTR
。
解决此编译错误的另一种方法是在项目属性 -> C/C++ -> 语言中将一致性模式设置为默认。至少它在我的 VS2019 项目中有效。