2010-12-12 63 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