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 在堆上分配和释放了一些存储空间。几乎可以肯定,您的错误存在于您的那部分代码中。