2012-07-09 100 views
0

我最近在一個程序中聲明瞭使用指針,當我嘗試以下時,我得到了這個錯誤。向一個向量添加一個新創建的對象

stored_points.push_back(new Point(anchor_y,anchor_x,last_direction)); 

錯誤C2664: '無效的std ::矢量< _Ty> ::的push_back(_Ty & &)':無法從 '點*' 轉換參數1至 '點& &' 與[ _Ty =點 ] 原因:無法從「點*」到「點」 轉換沒有構造函數可採取源類型,或構造函數重載解析模棱兩可

據我瞭解,使用新給出了一個指針回傳,以及.push_back可以」但是,接受這一點,我不知道如何去解決這個問題。

回答

0

你是如何定義你的矢量? 如果它的vector<Point>,請嘗試將其更改爲vector<Point*>。這告訴向量存儲指向對象的指針。

+0

這樣做的時候,會出現很多其他的錯誤,還有什麼我需要做的來解釋這個? – Behemyth 2012-07-09 02:44:44

+0

你還有其他什麼錯誤? – wquist 2012-07-09 03:03:26

+0

對於同一行,我收到相同的錯誤,並用此行「if(* stored_points.at(index).x == index_x_p && * stored_points.at(index).y == index_y_p){」i'm 「錯誤C2228:'.x'的左邊必須有class/struct/union 1> type是'Point *' 1>您是否打算使用' - >'?我的下一個響應將在十一個小時內完成,對於延遲提前抱歉。 – Behemyth 2012-07-09 03:08:05

0

非常快速的解決方法是更改​​矢量的定義。而不是vector<Point>,將其更改爲vector<Point *>。

但是你應該認真考慮在這種情況下使用智能指針。所以vector<shared_ptr<Point> >是你可能想要考慮的。

智能指針可用於Boost和TR1。