我有这样一段代码:错误无效的转换
class C
{
virtual vec3 f1(const A* a, B* b){...}
virtual vec3 f2(A const* a, B const* b)
{
vec3 color = f1(a, b);
...
}
}
我想打电话给f1
从f2
,但我不知道怎么打发b在正确的方法。 现在在编译时,我得到:
error: invalid conversion from 'const B*' to 'B* [-fpermissive]'
我已经试过vec3 color = f1(a, const_cast<B *>(b));
这将编译,但后来我得到执行分段错误。
请注意,我不能更改任何功能签名。 例如,我也不能改变A
或B
的定义来实现getCopy()
函数。
UPDATE:
我发现返回B的修改后的副本,所以我的问题就解决了一个功能。 谢谢大家说服我停止尝试将其直接投射到f1。
会解决方案是复制B,并传递该指针?显然,当函数返回时,您不希望B发生更改。我同意这是一个难题... – Floris
这将是奇怪的,因为如果第二个函数修改指针,我会认为这是因为调用者*想要*这个新值。或者,如果没有,那为什么会被修改? – CmdrMoozy
@CmdrMoozy - 有效的点。但这基本上是签名告诉你的。我认为这是一个“学术演习”。 – Floris