【发布时间】:2013-12-13 22:25:36
【问题描述】:
我有一个旧的 C/C++ 包,我正在尝试用 CygWin 编译它,因为它需要 Motif 和其他 X- 东西。大部分都可以编译,但是由于诸如...之类的行会出现一些警告。
静态字符串 fallbackResources[] = { "Joe", ..etc.. , NULL};
我收到编译器警告:不推荐将字符串常量转换为“String {aka char*}”
我在谷歌上搜索并找到了许多建议,通过将“char* fred[]”更改为“const char* fred[]”的出现来避免此警告,这是我为包中的大多数 c++ 文件所做的,而这个完美地消除了编译器警告。
但是我被“静态字符串”行卡住了,因为当我通过在“字符串”之前插入“const”来更改它们时,它没有任何区别,如果我将“字符串”更改为“const char *”,警告就会消失,但是由于稍后将数组发送到另一个函数的位置出错,程序无法编译......
无法将参数“7”的“const char*”转换为“char**”到....
任何帮助将不胜感激。
【问题讨论】:
-
当您将声明更改为“const char*”时,您没有删除“[]”?你需要这些。
-
String 类型,是 std::string 吗?如果不是,它起源于哪里?你确定事情就是在初始化的时候发疯的吗?
-
你能贴出其他函数的标题吗?听起来这个静态数组不应该是一个常量字符串数组,而是一个包含常规 char* 的数组。
-
编辑花了很长时间:你不能让它保持原样并在编译时出现警告吗?这听起来像是一个必要的邪恶。如果您无法处理警告,则将更改保留为“static const char* fallbackResources[]”,并在传递给其他函数时,将静态数组复制到实际的 char** 数组中。
-
谢谢大家。我确实留下了 [] ,但在文件中看不到任何 String 的定义。我的目标是摆脱错误。好的,我可以抑制警告,但我想先删除它们。这是出错的地方......mainscreen.c++:在函数'int main(int,char**)'中:mainscreen.c++:69:53:错误:从'const char**'到'char*的无效转换*' [-fpermissive] NULL, 0, &argc, argv,fallbackResources, NULL); ^ 在 /usr/include/Xm/Xm.h:59:0,... 中包含的文件中...