不确定编译器在抱怨什么,以及如何找到解决方案

时间:2014-03-31 19:45:48

标签: c++ cygwin

当我尝试在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 ) )

2 个答案:

答案 0 :(得分:4)

您应该显示您的代码,但您的问题是:

  1. 你在某处做过类似的事情:

    char *x = "hello";
    

    应该是:

    const char *x = "hello";
    
  2. 同样,char* color_itom(const char*, CHAR_DATA*)如果要从中返回字符串文字,则应返回const char *

  3. strcap被定义为char数组,但您要将inttolower返回的toupper值放入在某个地方。更改类型或进行显式演员。

  4. c->level = perm相同。添加显式广告或更改c->level的类型以匹配perm的类型。

答案 1 :(得分:1)

错误:

deprecated conversion from string constant to ‘char*’

是由使用字符串文字初始化char *引起的,例如

char* str = "something";

这应该是:

const char* str = "something";