c++ - 模板特化语法错误​​?没有把握

标签 c++ templates

我在使这个模板特化工作时遇到了一些麻烦。我是这个话题的新手,所以完全有可能我完全否定了这一点。

我的通用模板工作得很好,但是在尝试为 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;
        }
    }
}

最佳答案

只是避免使用 template<>前缀:

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;
        }
    }
}

您正在定义显式特化类的构造函数,而不是构造函数的显式特化。同样,避免使用 template<>对于其他成员的定义:

int Matrix<int>::numEdges()
{
    return 0;
}

另请注意,返回 const 的编程实践by value 是可疑的:宁可使用 intconst int .

关于c++ - 模板特化语法错误​​?没有把握,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15119300/

相关文章:

c++ - 局部变量的引用崩溃

c++ - 模板化检查是否存在类成员函数?

c++ - 如何使用显式模板实例化来减少编译时间?

c++ - 将 STDOUT 重定向到文件时缺少输出

C++队列模板

c++ - 其他成员函数的通用 'member function' 包装器?

C++ 模板参数引用/值特征

java - LWJGL:在 opengl 3+ 中返回 Matrix4f 的 gluLookAt?

c++ - 通过多线程对 C++ 中的流进行线程安全写入

c++ - 如何使用其复制构造函数和复制赋值是私有(private)的对象?