Шаблонный класс и свойства класса, которые также являются шаблонами - PullRequest
3 голосов
/ 02 февраля 2010

У меня проблемы с компиляцией следующего заголовка. Это мой первый опыт работы с шаблонами, и я предполагаю, что что-то не так. Компиляторы указывают на ошибки vector<vector<T>> data_; и функцию перегрузки оператора. Мне бы хотелось, чтобы вектор data_ имел тот же тип, что и объект OptBaseMatrix, но я не уверен, как это сделать ... Я действительно не знаю, как решить эту проблему. Помогите!

#ifndef OPTBASEMATRIX_H
#define OPTBASEMATRIX_H

#include <vector>

template<typename T>
class OptBaseMatrix 
{ 
public:
 vector<vector<T>> data_; 

 OptBaseMatrix(int rows, int cols);
 ~OptBaseMatrix();

 void readMatrix();
 void printMatrix();
 int getRows();
 int getCols();

    OptBaseMatrix<T> operator+(const OptBaseMatrix<T>& matrix1, const OptBaseMatrix<T>& matrix2);

private:
 int rows_; 
 int cols_; 
};

#endif // OPTBASEMATRIX_H

ОБНОВЛЕНИЕ : Вот фрагмент из журнала отладчика:

Error   1   error C2143: syntax error : missing ';' before '<'  optbasematrix.h 17  TD2
Error   2   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   optbasematrix.h 17  TD2

Я пытался изменить вектор> data_; по вектору> data_; и все еще получаю ту же ошибку: / Я где-то читал, что мой заголовок класса шаблона (.h) и реализация (.cpp) должны находиться в одном файле ... это возможно связано?

ОБНОВЛЕНИЕ 2 : Ух ты! Я забыл "использование пространства имен std;" Кажется, проблема исправлена!

Ответы [ 2 ]

8 голосов
/ 02 февраля 2010

Вам нужно поставить пробел между двумя >.

 vector<vector<T> > data_;

Без пробела >> рассматривается как оператор извлечения потока / сдвига вправо.

Кроме того, вам нужно либо объявить operator+ как свободную функцию, либо вы должны объявить ее только с одним параметром:

// Member function
Matrix<T> operator+(const Matrix<T>& other) const;

// Free function (`friend` makes the function free
// even though it's declared within the scope of the class definition)
friend Matrix<T> operator+(const Matrix<T>& lhs, const Matrix<T>& rhs);
2 голосов
/ 02 февраля 2010

Попробуйте:

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