所以我依照下面的代码摘录:
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);
}
问题出现在构造函数中。数组似乎根本没有被初始化,更不用说内部数组,我试图以不同的方式进行,但它不会初始化任何东西。任何人都可以给我一些我做错的提示吗?
答案 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;
}
}