修复弃用警告
Posted
技术标签:
【中文标题】修复弃用警告【英文标题】:Fixing Deprecation Warning 【发布时间】:2015-07-21 01:23:41 【问题描述】:编译下面的代码时,它给了我一个警告,即
deprecated conversion from string constant to 'char*'
.
可以通过哪些方式删除消息(不明确禁止警告)?
我尝试使用(const char*)
进行投射,但无济于事。
#include <windows.h>
int main()
typedef int * (*MyDownloadToUrl)(void*, char*, char*, DWORD, void*);
HINSTANCE LibHnd = LoadLibrary("Urlmon.dll");
MyDownloadToUrl MyDownloadFunction = (MyDownloadToUrl)GetProcAddress(LibHnd,"URLDownloadToFileA");
MyDownloadFunction(0, "http://MyWebsite.com", "Webpage.htm", 0, NULL);
【问题讨论】:
@J C 你试过typedef int * (*MyDownloadToUrl)(void*, const char*, const char*, DWORD, void*);
吗?
值得指出的是,URLDownloadToFile 的签名实际上确实使用了常量字符串。
@vsoftco 成功了。显然我在错误的论点中添加了const
。
【参考方案1】:
您需要const_cast<char*>("my string literal")
才能消除警告。在 C++03 中,从字符串文字(即 const char*
)到 char*
的隐式转换已被弃用。在 C++11 中,这样的隐式转换是错误的。
不过,在这种情况下,URLDownloadToFile
采用 LPCTSTR
类型的参数,根据 UNICODE
前置指令将其定义为 const wchar_t*
或 const char*
。
【讨论】:
以上是关于修复弃用警告的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“弃用警告:Collection#filterArray:使用 Collection#filter”?
修复了 tableView 函数的“已弃用并将在 Swift 4 中删除”警告
如何修复弃用警告:类级别方法将不再继承 Rails 6.1 中的范围?
如何修复 Xcode 7.3 警告:`init` 已弃用:它将在 Swift 3 中删除:在序列上使用`enumerate()` 方法 [重复]