c++ - 传递指向 C++ 中另一个指针的 'const' 指针

标签 c++ oop pointers

以下代码编译失败,在“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/

相关文章:

delphi - 如何使用 Windows CopyMemory 函数复制 TBitmap 内存

c++ - 正确指定旋转约束?

c++ - %p说明符仅用于有效的指针吗?

c++ - 尾随返回类型和标签分发

c++ - 在cpp中初始化数组并用零填充

java - 从基类方法调用基类重写函数

php - 从 javascript OOP 背景理解 php 类结构(如何调整代码工作流程)

java - 使用通用与位置之间的区别

c - 从另一个结构访问一个结构的指针

c - 具有多个指针的二维链表 C