修复弃用警告

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*

【讨论】:

以上是关于修复弃用警告的主要内容,如果未能解决你的问题,请参考以下文章