Шаблоны C ++ - матричный класс - PullRequest
0 голосов
/ 06 февраля 2011

Привет, я изучаю шаблоны на C ++, поэтому я решил написать матричный класс, который будет классом шаблона.В файле Matrix.h я написал

 #pragma once
#include "stdafx.h"
#include <vector>



using namespace  std;

template<class T>
class Matrix
{
public:

    Matrix();

    ~Matrix();
    GetDataVector();
    SetDataVector(vector<vector<T>> dataVector);
    bool operator == (Matrix* matrix);
    bool operator < (Matrix* matrix);
    bool operator <= (Matrix* matrix);
    bool operator > (Matrix* matrix);
    bool operator >= (Matrix* matrix);
    Matrix* operator + (Matrix* matrix);
    Matrix* operator - (Matrix* matrix);
    Matrix* operator * (Matrix* matrix);

private:
    vector<vector<T>>  datavector;
    int columns,rows;


};

В Matrix cpp Visual Stuio автоматически сгенерированный код для конструкторов по умолчанию

#include "StdAfx.h"
#include "Matrix.h"


Matrix::Matrix()
{
}



Matrix::~Matrix()
{
}

Однако если я хочу скомпилировать это, я получаю ошибку

'Matrix': использование шаблона класса требует списка аргументов шаблона. Ошибка в файле Matrix.cpp в конструкторах по умолчанию. В чем может быть проблема ??

Ответы [ 3 ]

4 голосов
/ 06 февраля 2011

Вы должны будете написать свои реализации функций вне класса как:

template <typename T>
Matrix<T>::Matrix() {}

template <typename T>
Matrix<T>::~Matrix() { }
1 голос
/ 06 февраля 2011

Вы не можете поместить определение шаблонов классов или методов в другой файл, так как компоновщик не будет связывать его (теоретически export существует, но никакой компилятор его не реализует).Вы можете поместить его в другой файл и затем включить его после объявления шаблона:

template<class T>
class Matrix
{
// (...) methods declarations here
};

#include "matrix_implementation.hpp"

Также не используйте директиву using namespace std; в заголовочном файле, поскольку она будет распространяться на все файлы, в которые она включена.

0 голосов
/ 06 февраля 2011

Даже если вы исправите ошибку компиляции (см. Ответ hkaiser), вы столкнетесь с ошибками компоновщика из-за способа организации кода шаблона. См. класс c ++ с ошибкой компиляции шаблонов , например

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...