我目前正在学习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;
}
在主要方法中,我尝试了两件事:
第一个:
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&amp;然而,obj对错误的原因感到好奇。
提前致谢
答案 0 :(得分:2)
您发布的代码编译,链接(一旦定义了缺失的析构函数),并且运行没有任何问题。
我发布的代码部分没有错。你的问题在于你遗漏的课程部分。
基于其他类方法的名称和一些类成员,很明显你的类在堆上分配和释放一些存储。几乎可以肯定的是,您的错误在于代码的那一部分。