以下代码编译失败,在“func(&pobj);”行出现两个错误在函数 main() 中声明“无法将‘X * *’转换为‘const X * *’”和“函数 main() 中参数 1 的类型不匹配(想要‘const X * *’,得到了‘X * *’)” "尽管它是传递指针参数的正确方法。以及评论这一特定行,即“func(&pobj);”并取消注释它上面的两行声明一个新的'const'指针'pp'所需类型(在func的参数中)但仍然在声明和分配'pp'的行上抛出一个错误说“无法转换'X * * ' 到函数 main() 中的 'const X * *'。
using X = int;
void func(const X **);
int main() {
X *pobj = new X(58);
// const X **pp = &pobj; // ERROR
// func(pp);
func(&pobj); // ERROR
}
我相信这是将常量指针作为参数传递的正确方法,但我只是不明白为什么程序无法编译。如果我错了,谁能指出上面代码中的错误并建议我正确的逻辑/语法?提前致谢。
更新: 这个问题被标记为重复,但没有解决手头问题的答案。因此,如果 Stack Overflow 社区能帮助我解决这里的问题,我会很高兴。谢谢。
最佳答案
这样做:
const X * pobj = new X(58);
// ^^^^^^
func(&pobj);
现在pobj
是一个指向const-X
的指针,它的地址是const X **
类型的要求。
如果你想保留原来的(可变)指针,你需要先创建一个新的const指针:
X * p = new X(58);
const X * q = p;
func(&q);
关于c++ - 传递指向 C++ 中另一个指针的 'const' 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37702681/