旧包中的C / C ++静态字符串

时间:2013-12-13 22:25:36

标签: c++ c string cygwin mingw

我有一个旧的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 **'到....

非常感谢任何帮助。

2 个答案:

答案 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。