2017-01-13 34 views
0

我想製作一個從矢量的單元格中獲取對象並修改它的函數。首先,我需要通過引用該函數來傳遞這個單元格,而我不能這樣做。如何將向量的單元格傳遞給C++中的函數?

void circleChoiceOne(Circle& object); 
vector<Shape*> shapeArr; 
int main() 
{ 
    circleChoiceOne(shapeArr[choice]); 
    return 0; 
    system("PAUSE"); 
} 

我得到的錯誤指向到第7行和它說: Circle &類型的引用不能與Shape *類型的值進行初始化。

回答

1

您不能使用指針初始化引用(除非它是指向指針的引用) - 編譯器正在說的是什麼。將函數簽名更改爲接受指針,或者使用取消引用的對象調用函數,或將std::ref存儲在容器中。這是假設ShapeCircle的後裔(這是稍微bizzare)。

實施例:

void circleChoiceOne(Circle* object); 

或者

circleChoiceOne(*shapeArr[choice]); 

或者

vector<std::ref<Shape>> shapeArr; 
+0

它不工作,它說:形狀「從沒有合適的轉換功能‘’到‘圓*’存在 –

3
shapeArr[choice]

將返回一個Shape*但該方法需要一個Circle&

我假設CircleShape的子類。

您將需要一個dynamic_castShape*垂頭喪氣到Circle*,那麼你會希望取消引用指針的值,這樣你就可以按引用傳遞。

您需要驗證Shape*實際指向一個Circle(而不是一個RectangleTorus)鑄造前,當它不能處理的情況。

+0

我試圖動態鑄造: ‘shapeArr [選擇] = dynamic_cast的(*圓);’ 但它在「Circle」中表示 - 類型名稱不允許 –

+0

@YazenVid你的問題和我的答案關注訪問vector中的一個元素,而不是賦值給它,而且你的註釋中的代碼不會被編譯,因爲'Circle '是一種類型,而不是一個變量。 – Dai

相關問題