【问题标题】:Error c2440: cannot convert const char[4] to char*错误 c2440:无法将 const char[4] 转换为 char*
【发布时间】:2018-01-07 03:50:50
【问题描述】:

我有一个问题:

我在 QT Creator(在 MSVC2013 中构建)中有一个代码,它首先可以完美运行,现在在其他具有更新的 QT Creator(在 MSVC2015 中构建)的计算机上尝试运行时给我这个错误:

“错误:C2664:'wave_object wave_init(char *)': 无法转换 参数 1 从 'const char [4]' 到 'char *'" "从字符串转换 字面量丢失 const 限定符(参见 /Zc:strictStrings)"

这部分代码有错误:

wave_object db4;                            
wt_object wt;
db4 = wave_init("db4");                     
wt = wt_init(db4, "dwt", N, 4);            
setDWTExtension(wt, "sym");
setWTConv(wt, "direct");

方法的定义在这里:

wave_object wave_init(char* wname) {
wave_object obj = NULL;
int retval;
retval = 0;

if (wname != NULL) {
    retval = filtlength(wname);
}

我用 MinGW 编译它并且没有错误,在使用 MSVC2013 构建的 QT Creator 的计算机上,使用 MSVC2013 编译器也可以正常工作,但现在使用 MSVC2015 构建的 QT Creator 使用 MSVC2015 编译器出现此错误。

我需要使用与 QT Creator 相同的编译器,因为我使用的是 QWT 插件,并且必须使用相同的编译器。

感谢您的帮助! =)

【问题讨论】:

    标签: qt visual-c++ qwt


    【解决方案1】:

    在你的函数调用中:

    db4 = wave_init("db4"); 
    

    "db4" 参数是字符串字面量,严格意义上来说是const

    你对函数的定义:

    wave_object wave_init(char* wname)
    

    不将参数wname 识别为const

    修改如下:

    wave_object wave_init(const char* wname)
    

    【讨论】:

    • 非常感谢,简单实用的解决方案!但是您知道为什么使用 MinGW 和 MSVC2013 编译器代码可以正常工作吗?
    • 我认为这就像编译器合规性的演变一样简单 - 后来的编译器逐渐变得更加合规(这通常意味着更严格)。
    • 这是 Visual C++ 2015 或更高版本中的特定一致性功能。您甚至可以将其关闭:/Zc:strictStrings- 以返回您在 VS 2013 中看到的旧的不合格行为。请参阅 MSDN
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多