Я написал матричный класс с перегруженными операторами.Однако всякий раз, когда я использую свой класс Matrix в другом файле, мой код не компилируется.Вот мои файлы
Файл Matrix.h
#include <vector>
#include <iostream>
#ifndef _MATRIX_H
#define _MATRIX_H
class Matrix {
private:
int row, col;
public:
std::vector<std::vector<double>> matrix;
Matrix(int);
~Matrix();
int getRows() const { return row; }
int getCols() const { return col; }
std::vector<double>& operator[](int index){
return matrix.at(index);
}
Matrix& operator+=(const Matrix& b){
if(row != b.getRows() || col != b.getCols()){
std::cerr << "Mismatched dimensions for +" << std::endl;
std::cerr << "A is " << row << "x" << col << std::endl;
std::cerr << "B is " << b.getRows() << "x" << b.getCols() << std::endl;
throw std::exception();
}
for(int i = 0; i < this->row; i++){
for(int j = 0; j < this->col; j++){
this->matrix[i][j] += b.matrix[i][j];
}
}
return *this;
}
};
#endif
Файл Matrix.cpp
#include "Matrix.h"
/**
* This constructor takes in a single positive integer n and
* makes an nxn sized matrix.
*/
Matrix::Matrix(int size){
if(size <= 0){
std::cerr << "Invalid size: " << size << std::endl;
std::cerr << "Sizes must be greater than 0!" << std::endl;
throw std::exception();
}
row = size;
col = size;
matrix.resize(size);
for(int i = 0; i < size; i++){
std::vector<double> newVector(size);
matrix[i] = newVector;
for(int j = 0; j < size; j++){
matrix[i].push_back(0);
}
}
}
Matrix::~Matrix() {
}
Matrix& operator+(Matrix a, const Matrix& b){
return a += b;
}
TestMatrix.cpp
#include "Matrix.h"
int main(){
Matrix a(2);
Matrix b(2);
a + b;
return 0;
}
Я скомпилировалиспользуя следующую команду
g ++ TestMatrix.cpp Matrix.cpp
, и я получил это только как вывод
TestMatrix.cpp: Inфункция 'int main ()': TestMatrix.cpp: 8: 9: ошибка: нет совпадения с оператором + (типы операндов - «Матрица» и «Матрица») a + b;^
Мой вопрос: как перегрузить операторы так, чтобы компилятор их распознал?