我目前正在学习C++并尝试一些愚蠢而简单的事情。这里是我的课:C++创建对象以外的类
class CRectangle
{
int x,y;
public:
// CRectangle(){};
int pb;
int *ptr;
void setValues(int,int);
int* allocateArray(int);
void changeVariable(CRectangle);
friend void mett(); // !!
~CRectangle();
};
void CRectangle::setValues(int a, int b)
{
x = a;
y = b;
}
void mett()
{
CRectangle t;
t.x =2;
t.pb = 3;
t.setValues(5,5);
}
void CRectangle::changeVariable(CRectangle obj)
{
(*this).pb = obj.pb;
//obj.pb = 50;
}
CRectangle::~CRectangle()
{
//delete [] ptr;
}
在main方法中,我已经尝试了两件事情:
第一种:
int main()
{
mett();
}
我只是在METT创建一个类的对象()方法,并提出了一些变数分配,但它会引发访问冲突错误。我试图将方法定义为朋友,这并不重要。同样的错误。还试着用全局CRectangle对象,结果是一样的。
第二个:
int main()
{
CRectangle obj;
CRectangle obj2;
obj.pb = 100;
obj2.pb = 180;
cout << obj.pb << "\n";
obj.changeVariable(obj2);
cout << obj.pb << endl;
}
同样,当我试试这个,它会引发访问冲突错误。通过将CRectangle参数定义为const CRectangle & obj,我解决了问题 ,但是仍然很好奇错误的原因。
预先感谢
编辑:这个问题是试图删除未初始化的指针在析构函数。我一开始并没有说,认为它非常不相关。对不起。
你的'〜CRectangle'析构函数是否用'ptr'(它从未被初始化)做过什么? – aschepler 2015-02-08 23:40:54
是的,我删除了它。 – nihirus 2015-02-08 23:41:55
请使用智能指针代替原始指针 – 2015-02-08 23:52:56