1

このテンプレートの特殊化を機能させるのに少し問題があります。私はこのトピックに慣れていないので、これを完全に解体した可能性は十分にあります。

一般的なテンプレートは正常に機能しましたが、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;
        }
    }
}
4

1 に答える 1

2

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値を返すプログラミング手法は疑わしいことに注意してください。ではintなく、を使用してconst intください。

于 2013-02-27T18:21:45.033 に答える