当我尝试在cygwin下编译源代码时,我发现了一个巨大的错误列表。我学习编程的最佳方法是努力工作,以及跟踪和错误。所以,即使我的C ++知识非常基础,我仍然是新的,所以当你解释时,我可以请求你使用婴儿谈话,因为缺乏一个更好的单词大声笑。当我在源目录下输入'make'时,会给我这些错误。我的一个朋友,我们是MUD的朋友,他已经做了35年的程序员,他告诉我,编译器不喜欢函数返回指针并改变所有“返回”'''返回strdup('''')
请让我知道你们的想法。感谢
在我在Cygwin中键入make后,下面只是语法的一小部分。我希望有人有时间向我解释一下,谢谢。
$ make
make -s smaug
-Compiling o/imc.o....
imc.c:106:1: error: deprecated conversion from string constant to ‘char*’ [-Werror=write-strings]
};
^
imc.c:106:1: error: deprecated conversion from string constant to ‘char*’ [-Werror=write-strings]
imc.c:106:1: error: deprecated conversion from string constant to ‘char*’ [-Werror=write-strings]
imc.c:106:1: error: deprecated conversion from string constant to ‘char*’ [-Werror=write--strings]
imc.c:106:1: error: deprecated conversion from string constant to ‘char*’ [-Werror=write-strings]
imc.c:106:1: error: deprecated conversion from string constant to ‘char*’ [-Werror=write-strings]
imc.c: In function ‘char* color_itom(const char*, CHAR_DATA*)’:
imc.c:393:14: error: deprecated conversion from string constant to ‘char*’ [-Werror=write-strings]
return "";
^
imc.c: In function ‘char* color_mtoi(const char*)’:
imc.c:414:14: error: deprecated conversion from string constant to ‘char*’ [-Werror=write-strings]
return "";
^
imc.c: In function ‘char* imccapitalize(const char*)’:
imc.c:525:35: error: conversion to ‘char’ from ‘int’ may alter its value [-Werror=conversion]
strcap[i] = tolower( str[i] );
^
imc.c:527:35: error: conversion to ‘char’ from ‘int’ may alter its value [-Werror=conversion]
strcap[0] = toupper( strcap[0] );
^
imc.c: In function ‘void imc_new_channel(const char*, const char*, const char*, const char*, const char*, bool, int, const char*)’:
imc.c:1089:13: error: conversion to ‘short int’ from ‘int’ may alter its value [-Werror=conversion]
c->level = perm;
^
^
cc1plus: all warnings being treated as errors
Makefile:101: recipe for target 'o/imc.o' failed
make[1]: *** [o/imc.o] Error 1
Makefile:46: recipe for target 'all' failed
make: *** [all] Error 2
以下是显示第106行的错误的代码:1和393:它是一个非常lonnng .c文件我相信你们不想上传整个东西,但这里是它的一部分,并且根据Visual 2013,这里是起点106和393:我不确定cygwin何时说出错误发生的行号,如果不包括空格和注释,但根据VS,这里是106和393:
第106行
SITEINFO *this_imcmud;
第393行
if( IMCIS_SET( IMCFLAG( ch ), IMC_COLORFLAG ) )
答案 0 :(得分:4)
您应该显示您的代码,但您的问题是:
你在某处做过类似的事情:
char *x = "hello";
应该是:
const char *x = "hello";
同样,char* color_itom(const char*, CHAR_DATA*)
如果要从中返回字符串文字,则应返回const char *
。
strcap
被定义为char
数组,但您要将int
和tolower
返回的toupper
值放入在某个地方。更改类型或进行显式演员。
c->level = perm
相同。添加显式广告或更改c->level
的类型以匹配perm
的类型。
答案 1 :(得分:1)
错误:
deprecated conversion from string constant to ‘char*’
是由使用字符串文字初始化char *引起的,例如
char* str = "something";
这应该是:
const char* str = "something";