2010-12-12 27 views
0

爲什麼這段代碼崩潰當我運行它C++運行超載,碰撞

ostream& operator<<(ostream& cout, Array<int> a) { 

    return cout; 
} 

這並不

ostream& operator<<(ostream& cout, Array<int>& a) { 

    return cout; 
} 
+1

你如何運行它?你可以發佈一個小背景嗎?什麼是陣列? – 2010-12-12 13:55:59

+2

你必須顯示什麼是陣列!很可能你正在分配內存,並且你沒有拷貝構造函數,並且析構函數會釋放內存。 – AraK 2010-12-12 13:56:30

回答

1

什麼爲Array<int>拷貝構造函數做方案?看看What is The Rule of Three?的第一個答案是否解決了你的問題(即你的類在內部處理了一個指向資源的指針,但未能在它的拷貝構造函數中執行深層拷貝,導致兩個實例刪除相同的資源)。

1

壓倒性的可能性是你的Array<int>的拷貝構造函數或析構函數被搞砸了。除此之外,你還有一些嚴重的命名空間問題 - 你使用了命名空間std作爲ostream,但隨後調用了你的參數cout,這是與std :: cout的衝突。我很驚訝這個代碼編譯 - 你應該總是使用標準名稱的std ::,因爲否則只是不明確。

+1

沒有衝突:參數默默地影響全局變量和成員變量。 – 2010-12-12 14:05:01