2011-11-10 103 views
0

我想在包含幾何數據的C++中創建一個列表。這份名單是三角形的列表:插入對象到列表中,C++

class Triangle 
{ 
public: 
Triangle(Point P1, Point P2, Point P3); 
Triangle(const Triangle& T); 
~Triangle() {delete e1; delete e2; delete e3;} 



const Triangle operator=(const Triangle & T); 

bool InCircle(Point & P); 
int TriNumber() { return TriangleNumber;} 
void SetTriNumber(int trinum) { TriangleNumber = trinum;} 
Edge ReturnEdge(int i); 
Point ReturnPoint(int i); 





protected: 
Point p1,p2,p3; 
Edge *e1, *e2, *e3; 
int TriangleNumber;    
}; 

然而,當我嘗試創建三角形的名單,我用以下幾行代碼段故障:

const Point p1(100.0, 100.0); 
const Point p2(-100.0, 100.0); 
const Point p3(0.0, -150.0); 



Triangle TT(p1,p2,p3); 

list<Triangle> trilist; 
list<Triangle>::iterator iter; 
iter = trilist.begin(); 
// the next line is causing all the problems: 
trilist.insert(iter, TT); 

任何幫助是極大的讚賞。

+0

你得到了什麼確切的錯誤?來自gdb的堆棧跟蹤會很有幫助。 – anio

+0

你的ctor看起來像什麼? –

+5

顯示默認和複製構造函數的定義,以及賦值運算符(順便提一下,它有錯誤的簽名)。 –

回答

0

根據複製構造函數和賦值運算符的實現,邊緣*e1, *e2, *e3可能不止一次被刪除。

我們可以看到那些確認的執行嗎?

2

請記住,STL容器會將副本放入其中。 (請參閱Scott Meyers的「Effective STL」,第3項。)

如果您的對象沒有正確地複製,那麼當您將它們放入容器時,最多會得到分割錯誤,最糟糕的是最可能出現細微的錯誤。 (As Meyers指出,「複製,複製,這是STL的方式。」)

由於你的對象似乎暗示動態分配在某處,我猜測複製構造函數,賦值運算符或析構函數你的一個類沒有正確實現。