C++ 在 Class 之外创建对象
C++ Creating Object Outside of Class
我目前正在学习c++并尝试一些愚蠢而简单的事情。这是我的 class:
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() 方法中创建了一个 class 对象,并进行了一些变量赋值,但是它抛出了访问冲突错误。我试图将方法定义为朋友,没关系。仍然是同样的错误。还尝试使用全局 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,但是仍然对错误原因感到好奇。
提前致谢
编辑:问题是试图删除析构函数中未初始化的指针。起初我没有放它,认为它非常不相关。抱歉。
您发布的代码可以编译、链接(一旦定义了缺少的析构函数)并且运行没有任何问题。
我认为您发布的代码部分没有任何问题。您的问题出在 class 中您遗漏的部分。
根据其他 class 方法和一些 class 成员的名称,很明显您的 class 在堆上分配和释放了一些存储空间。几乎可以肯定,您的错误存在于您的那部分代码中。
我目前正在学习c++并尝试一些愚蠢而简单的事情。这是我的 class:
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() 方法中创建了一个 class 对象,并进行了一些变量赋值,但是它抛出了访问冲突错误。我试图将方法定义为朋友,没关系。仍然是同样的错误。还尝试使用全局 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,但是仍然对错误原因感到好奇。
提前致谢
编辑:问题是试图删除析构函数中未初始化的指针。起初我没有放它,认为它非常不相关。抱歉。
您发布的代码可以编译、链接(一旦定义了缺少的析构函数)并且运行没有任何问题。
我认为您发布的代码部分没有任何问题。您的问题出在 class 中您遗漏的部分。
根据其他 class 方法和一些 class 成员的名称,很明显您的 class 在堆上分配和释放了一些存储空间。几乎可以肯定,您的错误存在于您的那部分代码中。