我有這樣一段代碼:錯誤無效的轉換
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