C ++在类之外创建对象

时间:2015-02-08 23:35:32

标签: c++ class object access-violation

我目前正在学习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对错误的原因感到好奇。

提前致谢

编辑:问题是尝试删除析构函数中未初始化的指针。我起初并没有把它放在一边,认为这是非常无关紧要的。对不起。

1 个答案:

答案 0 :(得分:2)

您发布的代码编译,链接(一旦定义了缺失的析构函数),并且运行没有任何问题。

我发布的代码部分没有错。你的问题在于你遗漏的课程部分。

基于其他类方法的名称和一些类成员,很明显你的类在堆上分配和释放一些存储。几乎可以肯定的是,您的错误在于代码的那一部分。