任何想法如何解决?会非常有用。我尝试将一致性模式更改为关闭并且它工作但程序的其他部分失败了。还有其他修复吗?
有问题的线路:
RecursiveDelete(path, L"desktop.ini");
编辑 :
该程序是更改 windows 注册表文件并与我的 c++ 加载程序连接。当项目是独立的,没有连接到加载器时,它工作得很好。
任何想法如何解决?会非常有用。我尝试将一致性模式更改为关闭并且它工作但程序的其他部分失败了。还有其他修复吗?
有问题的线路:
RecursiveDelete(path, L"desktop.ini");
编辑 :
该程序是更改 windows 注册表文件并与我的 c++ 加载程序连接。当项目是独立的,没有连接到加载器时,它工作得很好。
该RecursiveDelete()
函数有 2 个LPWSTR
参数。 LPWSTR
是 的别名wchar_t*
,即指向非常量wchar_t
数据的指针。但是,字符串文字是const
数据,在这种情况下L"desktop.ini"
是 a const wchar_t[12]
(包括空终止符),它衰减为const wchar_t*
指针。您不能在预期的pointer-to-const
地方使用 a pointer-to-non-const
,这就是错误消息所抱怨的。
如果函数不改变其第二个参数的内容,则该参数应实现为 a pointer-to-const
,例如:
void RecursiveDelete(LPWSTR, LPCWSTR);
(又名void RecursiveDelete(wchar_t*, const wchar_t*);
)。
如果更改函数的声明不是一个选项(即,它来自现有的 API 等),您可以使用const_cast
(非常小心地这样做!)来抛弃字符串文字的常量,例如:
RecursiveDelete(path, const_cast<LPWSTR>(L"desktop.ini"));
但是,制作字符串文字数据的非常量副本会更安全,例如:
wchar_t copy[] = L"desktop.ini";
RecursiveDelete(path, copy);