+ -
当前位置:首页 → 问答吧 → invalid conversion from 'const char*' to 'char*'

invalid conversion from 'const char*' to 'char*'

时间:2010-08-03

来源:互联网

为啥俺从源代码编译软件时会出现这错误。难道是软件作者的失误么?

以前编译QT也出现过这情况,感觉是GCC的问题。。。。。。

作者: tempname2   发布时间: 2010-08-03

无码无真相

作者: daybreakcx   发布时间: 2010-08-03

该要char*的地方却给了一个const char*

你把那个代码拿出来看看撒

作者: 雨过白鹭洲   发布时间: 2010-08-03

  1. void f(char* s);
  2. f("char const*");
复制代码
这样?

作者: OwnWaterloo   发布时间: 2010-08-03

gcc4.4的变化

作者: prolj   发布时间: 2010-08-03



QUOTE:
APELink.cpp: In member function 'void CAPELink:arseData(const char*, const str_utf16*)':
APELink.cpp:66: error: invalid conversion from 'const char*' to 'char*'
APELink.cpp:67: error: invalid conversion from 'const char*' to 'char*'
APELink.cpp:68: error: invalid conversion from 'const char*' to 'char*'
APELink.cpp:69: error: invalid conversion from 'const char*' to 'char*'
make[3]: *** [APELink.lo] 错误 1
make[3]: Leaving directory `/home/yan/mac-3.99-u4-b5/src/MACLib'
make[2]: *** [all-recursive] 错误 1
make[2]: Leaving directory `/home/yan/mac-3.99-u4-b5/src/MACLib'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/home/yan/mac-3.99-u4-b5/src'
make: *** [all-recursive] 错误 1



APELink 里对应的出错代码如下:
  1. char * pHeader = strstr(pData, APE_LINK_HEADER);
  2. char * pImageFile = strstr(pData, APE_LINK_IMAGE_FILE_TAG);
  3. char * pStartBlock = strstr(pData, APE_LINK_START_BLOCK_TAG);
  4. char * pFinishBlock = strstr(pData, APE_LINK_FINISH_BLOCK_TAG);
复制代码
把几个变量定义前加上const后,这个地方就没报错了,但其它地方又出现了这个转换错误。

记起来了,以前编译QT时也是调用标准库里的字符串函数出错的,难道写代码的这些人都不注意这个么?

那他们提供的二进制包是怎么编译通过的呢?难道以后每次遇到这种情况都得手动改?

作者: tempname2   发布时间: 2010-08-03

应该有开关选项可以解决这个的吧。。。。。

作者: tempname2   发布时间: 2010-08-03

回复 prolj

求解……
前两天刚好遇到这问题……

作者: OwnWaterloo   发布时间: 2010-08-03

回复 prolj

这个? http://gcc.gnu.org/gcc-4.4/porting_to.html

QUOTE:
Strict null-terminated sequence utilities

Some of the standard C++ library include files have been edited to use replacement overloads for some common C library functions (if available), with the goal of improving const-correctness: functions passed a const char* return const char*.

作者: OwnWaterloo   发布时间: 2010-08-03

就是libstdc++改了,就是这个。

作者: prolj   发布时间: 2010-08-03

回复 prolj

C++标准从一开始就要求将C里面const进non-const出的函数加上重载版本……
libstdc++居然现在才改……


我疑惑的是另外两个问题……

1. 你怎么连发生改动的准确版本号都知道……

一致关注gcc中?

2. 4楼提到的不是libc++的问题, 而是
  1. void f()
  2. {
  3.       char* s = "s";
  4. }
复制代码
帮别人检查代码时发现的手误。
虽然我从来不写这样的代码, 但这确实是合法的……

gcc2.9.5, gcc3.4.x都没警告, gcc4.4.0有了……


QUOTE:
warning: deprecated conversion from string constant to 'char*'


是因为C++0x?

作者: OwnWaterloo   发布时间: 2010-08-03

本帖最后由 donglongchao 于 2010-08-03 13:49 编辑

回复 OwnWaterloo


QUOTE:
warning: deprecated conversion from string constant to 'char*'


会有这个吗?我咋没有。。。gcc4.4.0,-Wall


编辑:好吧,我错了。cpp会有,c没有。。。

作者: donglongchao   发布时间: 2010-08-03

回复 donglongchao

有警告…… 也是gcc4.4.0……
不过, 其实是Windows上的mingw……
应该不会因为这个不同吧……

作者: OwnWaterloo   发布时间: 2010-08-03

相关阅读 更多