2

我目前正在学习 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 类型的实体

有任何想法吗?

谢谢

4

3 回答 3

4

LPWSTR是 的别名wchar_t*,即指向非常量字符的指针。

字符串文字是一个 const 字符数组,在您的情况下是 a const wchar_t[35]。它衰减为指向 const 字符的指针,指向文字中的第一个字符。

您不能将指向 const 的指针分配给指向非 const 的指针。这将允许对只读内存进行写访问。

请改用LPCWSTR,它是const wchar_t*.

LPCWSTR test = L"C:\\Users\\user\\Pictures\\minion.png"; 
于 2020-06-25T16:14:12.897 回答
4

MSVC 编译器变得越来越不宽容。总的来说这是一件好事。

L"C:\\Users\\user\\Pictures\\minion.png"是类型的文字const wchar_t[34](额外的元素用于字符串终止符)。在某些情况下,它会衰减为指针。const wchar_t*

LPWSTR不是const指针类型,因此在标准 C++ 编译器上编译将失败。

解决方法是使用const指针类型LPCWSTR

于 2020-06-25T16:17:31.193 回答
0

解决此编译错误的另一种方法是在项目 Properties -> C/C++ -> Language 中将 Conformance Mode 设置为 Default。至少它在我的 VS2019 项目中有效。

于 2021-06-21T05:13:06.090 回答