我在让这个模板专业化工作时遇到了一些麻烦。我是这个话题的新手,所以我完全扼杀了这个可能性是完全有可能的。
我的通用模板工作得很好,但是在尝试为 int 制定规范时,我不断收到错误消息“'Matrix' 的离线定义与 Matrix int> 中的任何声明都不匹配。
现在,我认为它们匹配,但显然肯定有问题。大师们怎么说?另外,不要粗鲁,但“你实际上应该只使用 STL 中的 X”评论不会有太大帮助,我必须弄清楚这一点才能完成任务。干杯!
template<typename T>
class Matrix
{
public:
Matrix(int vert, int edge);
~Matrix();
T* & operator[](int index);
std::ostream& operator<<(std::ostream&);
Matrix<T> operator*(Matrix<T>);
int numVerticies();
int numEdges();
private:
T** matrix;
int verticies;
int edges;
const int summation(T** mat1, int, Matrix<int> mat2, int, int verts);
};
template<>
class Matrix<int>
{
public:
Matrix(int vert, int edge);
~Matrix();
int*& operator[](int index);
std::ostream& operator<<(std::ostream&);
Matrix<int> operator*(Matrix<int>);
int numVerticies();
int numEdges();
private:
int** matrix;
int verticies;
int edges;
const int summation(int** mat1, int, Matrix<int> mat2, int, int verts);
};
使用包含方法与其他成员一起引入:
template<int>
Matrix<int>::Matrix(int vert, int edge)
{
matrix = new int* [vert];
for (int i=0; i<vert; i++) {
matrix[i] = new int[vert];
}
verticies = vert;
edges = edge;
for (int i=0; i<vert; i++) {
for (int j=0; j<vert; j++) {
matrix[i][j]=0;
}
}
}