'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 类型的实体

有什么想法吗?

谢谢

LPWSTRwchar_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 项目中有效。