如何正确实现类的显示功能?

时间:2014-11-04 07:51:48

标签: c++ function

我有一个名为magicSquare的类,它带有一个构造函数和一个名为display的显示函数。构造函数创建魔术方块,显示功能显示结果。在我的main函数中,我创建了一个名为ms的magicSquare实例,并给它一个值7.要显示它,如果我只是做了ms.display(),它不应该工作吗?

class magicSquare
{
private:

int size, square;
vector<vector <int> > finalvec;

public:

magicSquare(int a):finalvec(a, std::vector<int>(a))
{
    int i = 0;
    int j = a/2;

    size = a;
    square = a * a;

    vector<int>vec(a);
    vector<vector<int> >   finalvec(a,vec);

    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j< size; j++)
          cout << finalvec[i][j];
          cout << endl;
    }

    for (int k=0; k < square; ++k)
    {
        finalvec[i][j] = k;
        i--;
        j++;

        if (k%a == 0)
        {
            i = i+ 2;
            --j;
        }
        else
        {
            if (j==a)
              j = j- a;
            else if (i<0)
              i = i+ a;
        }
    }

}

void display()
{
    for (int i = 0; i < size; i++)
    {
            for (int j = 0; j< size; j++)
                cout << finalvec[i][j];
                cout << endl;

    }
}
};


int main()
{
    magicSquare ms(3);
    ms.display();
    return 0;
}

1 个答案:

答案 0 :(得分:-1)

您的错误

正如@Retired Ninja指出的那样,向量&gt; finalvec(一,VEC);隐藏你的成员变量finalvec,当你将它重新定义为一个新的向量...

什么可以纠正

您可以在Member initializer list内构建您的矢量

magicSquare(int a) : finalvec(a, std::vector<int>(a, 0)) {
 /* your constructor */
}

删除两行:

vector<int>vec(a);
vector<vector<int> >   finalvec(a,vec);

在您的代码中

如何不犯此错误

查看哪个值是类成员,方法参数甚至上下文变量有时可能很困难:

我建议你做的是:

 class member      -> m_NAME_OF_YOUR_CLASS_MEMBER
 method parameter  -> t_NAME_OF_YOUR_METHODE_PARAMETER
 context variable  -> c_NAME_OF_YOUR_CONTEXT_VARIABLE

通过像你所做的那样做这个错误有点困难!

编辑:测试代码后

我看到它有错误,实际上,这是你第一次进入该行:

finalvec[i][j] = k;

我&gt;大小,所以你进一步访问你的向量允许它,这导致段错误!请修复你的代码!

希望可以提供帮助