无法初始化类中的多维数组

时间:2014-04-30 05:19:29

标签: c++ arrays multidimensional-array

所以我依照下面的代码摘录:

template<class DT>
class AdjMat
{
protected:
    DT** myMatrix;
    int noOfNodes;
    int noOfEdges;

public:
    AdjMat(int _noOfNodes, int _noOfEdges);
    //Destructor, constructors and other methods
};

template<class DT>
AdjMat<DT> :: AdjMat(int _noOfNodes, int _noOfEdges)
{
    myMatrix = new DT*[_noOfNodes+1];
    for(int i = 0; i < _noOfNodes+1; i++)
    {
        myMatrix[i] = new DT[_noOfNodes+1];
        for(int j = 0; j < noOfNodes+1; j++)
            myMatrix[i][j] = 0;
    }
    noOfNodes = _noOfNodes;
    noOfEdges = _noOfEdges;
}

int main()
{
    adjMat<int> m(5, 9);
}

问题出现在构造函数中。数组似乎根本没有被初始化,更不用说内部数组,我试图以不同的方式进行,但它不会初始化任何东西。任何人都可以给我一些我做错的提示吗?

1 个答案:

答案 0 :(得分:1)

错误在这一行。

    for(int j = 0; j < noOfNodes+1; j++)

noOfNodes尚未初始化。你可能意味着:

    for(int j = 0; j < _noOfNodes+1; j++)

您可以通过遵循更安全的做法来避免此类错误。在初始化列表中初始化尽可能多的成员。

template<class DT>
AdjMat<DT> :: AdjMat(int _noOfNodes, int _noOfEdges) : noOfNodes(_noOfNodes),
                                                       noOfEdges(_noOfEdges),
                                                       myMatrix(new DT*[_noOfNodes+1])
{
    for(int i = 0; i < noOfNodes+1; i++)
    {
        myMatrix[i] = new DT[noOfNodes+1];
        for(int j = 0; j < noOfNodes+1; j++)
            myMatrix[i][j] = 0;
    }
}