gpt4 book ai didi

c++ - 无法从 'DerivedClass *' 转换为 'BaseClass *&'

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:00 24 4
gpt4 key购买 nike

我尝试了下面的代码,并得到了一个编译错误。

class A {};
class B : public A {};

void f(A*& p) {}

int
main()
{
B* pB;
f(pB); // cannot convert argument 1 from 'B *' to 'A *&'

return 0;
}

如何让 f(pB) 调用 f(A*&p) 函数?

最佳答案

传递给非const 引用的指针变量必须与引用匹配相同的数据类型。该函数需要对 A* 指针的引用,因此这就是您必须提供的内容。如果您有一个 B* 指针开始,首先将它分配给一个 A* 变量(因为 B 派生自 A):

B* pB = ...;
A* pA = pB;
f(pA);

但是如果函数修改了传递给它的指针,它将修改pA 而不是pB。如果您需要它来修改 pB,您将不得不重新考虑您的设计。

如果您将参数限定为 const,从而保证 f 不会修改它,那么就没有问题:

void f(A* const & p) { /* Compiles fine */ }

关于c++ - 无法从 'DerivedClass *' 转换为 'BaseClass *&',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com