Dzień dobry!
W ramach nauki programowania obiektowego bawię się ostatnio z programem, w którym próbuję zaimplementować klasę reprezentującą macierz. Chciałem, żeby moja klasa główna Matrix posiadała pole składowe klasy Shape, w którym to polu byłyby przechowywane informacje o kształcie macierzy. Mój kod wygląda tak:
Klasa Matrix:
#include <vector>
#include <iostream>
#include "Shape.hpp"
using namespace std;
template <typename T>class Matrix
{
private:
vector<vector<T>> matrix;
public:
Shape shape;
explicit Matrix(unsigned int, unsigned int = 0);
explicit Matrix(vector<vector<T>>);
void show();
};
Klasa Shape:
class Shape
{
private:
unsigned int rows;
unsigned int cols;
public:
Shape(unsigned int _rows, unsigned int _cols): rows(_rows), cols(_cols){}
bool is_square() {return cols==rows;}
unsigned int get_rows() {return rows;}
unsigned int get_cols() {return cols;}
};
Konstruktor klasy Matrix:
template<typename T> Matrix<T>::Matrix(unsigned int r, unsigned int c)
{
shape(r,c);
if(c==0)
{
c = r;
}
matrix.resize(r);
for(auto &i : matrix)
{
i.resize(c);
}
}
Przy próbie kompilacji programu otrzymuję błąd:
error: no matching function for call to 'Shape::Shape()'
Nie wiem w jaki sposób wywołać konstruktor klasy Shape wewnątrz konstruktora klasy Matrix tak aby to zadziałało, bardzo prosiłbym o pomoc i z góry dziękuję.