假设我有一个功能签名:
bool func(const char** arrayOfStrings);
我有一个带签名的辅助功能:
char** auxFunc(not relevant);
出于某种原因,我可以设法做到以下几点:
func(auxFunc(not relevant));
我收到编译器警告/错误:
错误:使用类型为'char * '的表达式初始化'const char * '会丢弃嵌套指针类型中的限定符
为什么这不能像我期望的那样工作,我能做些什么呢?
答案 0 :(得分:2)
您要求编译器执行从char **
到const char **
的隐式转换,这会危险地违反const-correctness规则。这就是编译器出错的原因。
阅读常见问题条目here以更好地了解问题(此处也有关于此问题的答案很多)。
之后,您应该确定在您的情况下什么是最佳解决方案:重新设计代码以消除问题或通过显式强制转换来抑制错误。没有更详细地了解你的设计/代码(你没有提供),没有人能为你做到这一点。
答案 1 :(得分:-2)
不幸的是,C不会从char **
隐式转换为char const **
,尽管这样做是安全的。您必须明确地func((char const **)(auxFunc()))
投射它。