Я новичок в c ++, и шаблоны определенно не дружат в синтаксисе. В основном, вот некоторые из функций, которые я написал, протестировал и закончил. Только один быстрый вопрос, я часами пытался написать перегрузку оператора не-члена для моего матричного класса и получал все типы синтаксических ошибок. Итак, с чего мне начать?
Вот мой myMatrix.h:
#ifndef MYMATRIX_H
#define MYMATRIX_H
#include <exception>
#include <vector>
#include <iostream>
using namespace std;
/* I'm using this matrix to store data */
template<typename T>
using twoD = std::vector<std::vector<T>>;
template<class T>
class Matrix{
private:
int rows;
int cols;
twoD<T> matrix;
protected:
void validSizeCheck(int rows, int cols);
public:
Matrix(int rows, int cols);
Matrix(int rows, int cols, twoD<T> newMatrix);
twoD<T> getMatrix();
int getRows();
int getCols();
void printMatrix();
void operator=(const Matrix<T> &);
Matrix<T> &operator+=(const Matrix<T> &);
Matrix<T> operator+(const Matrix<T> &);
Matrix<T> operator*(const Matrix<T> &);
Matrix<T> operator*(const T &);
};
Вот одна из вещей, которые я попробовал:
template <class T>
Matrix<T> operator-(const Matrix<T>& lhs,const Matrix<T>& rhs){
if(lhs.rows != rhs.cols || lhs.rows != rhs.cols{
throw exception();
}
Matrix tmp(lhs.rows, lhs.cols);
for(int i = 0; i < lhs.rows; i++){
for(int j = 0; j < cols; j++){
tmp.matrix[i][j] = lhs.matrix[i][j]+rhs.matrix[i][j];
}
}
return tmp;
}
Очевидно, что это не сработало ..
Так какой синтаксис я должен следовать для этого? Кроме того, это может быть очень глупый вопрос, но должна ли функция, не являющаяся членом, находиться в файле заголовка или в файле .cpp? Пока что все, что я написал, было в файле .h, так как они все шаблоны ..
Любая помощь будет принята с благодарностью.
ОБНОВЛЕНИЕ:
Я наконец получил код для работы, для объявления класса и функции, я добавил это:
template<class T>
class Matrix{
private:
...
protected:
...
public:
...
template<class U>
friend Matrix<U> operator-(const Matrix<U>& lhs, const Matrix<U>& rhs);
};
Вот определение функции:
template <class U>
Matrix<U> operator-(const Matrix<U>& lhs,const Matrix<U>& rhs){
if(lhs.rows != rhs.cols || lhs.rows != rhs.cols){
throw exception();
}
Matrix<U> tmp(lhs.rows, lhs.cols);
for(int i = 0; i < lhs.rows; i++){
for(int j = 0; j < lhs.cols; j++){
tmp.matrix[i][j] = lhs.matrix[i][j]-rhs.matrix[i][j];
}
}
return tmp;
}
работает отлично, без предупреждения! Спасибо за помощь