修复弃用警告

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&lt;char*&gt;("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()` 方法 [重复]

如何修复已弃用的“按钮样式”

警告 onRowClick 已弃用