我有一个旧的C / C ++包我试图用CygWin编译,因为它需要Motif和其他X-things。大多数编译好,但由于像......这样的线路有一些警告。
static String fallbackResources [] = {“Joe”,.. iec ..,NULL};
我收到编译器警告:不推荐将字符串常量转换为'String {aka char *}'
我已经google搜索并找到了许多建议来避免此警告,方法是将“char * fred []”的出现更改为“const char * fred []”,这是我为包中的大多数c ++文件所做的已经完美地删除了编译器警告。
但是我坚持使用“静态字符串”行,因为当我通过在“字符串”之前插入“const”来更改它们时它没有任何区别,如果我将“字符串”更改为“const char *”,则警告消失但是由于稍后将程序发送到另一个函数的错误,该程序无法编译....
无法将参数'7'的'const char *'转换为'char **'到....
非常感谢任何帮助。
答案 0 :(得分:1)
谢谢大家,google了更多,发现(https://stackoverflow.com/a/14648630/3100869) - 答案似乎是使用const_cast这样:
static String fallbackResources [] = { const_cast(“Joe”),.. iec ..,NULL};
......警告消失了!
答案 1 :(得分:0)
问题在于你在指针上有两个const
级别:指针本身及其指向的内容。 char const *
是指向const char的指针(从右到左读取),而char* const
是指向char的const指针。
您的案例中String
似乎是char*
的typedef。像你一样制作那个const会把它变成char* const
。您需要修复typedef。