Operator indeksowania macierzy [][]

0

Witam,
Ostatnio męczę się z operatorem indeksowania do macierzy. Macierz mam na tablicy wskaźników, nie na vectorze i tak chciałbym żeby zostało. Tak samo nie mogę zamienić na operator (), musi to być [][]. Czytałem już dużo o tym na internecie, ale nie znalazłem oczekiwanego rezultatu. Oto co próbowałem:
Array.h:

struct Row;

class Array
{
public:
	const int m;
	const int n;
	int** array;
	Array(int m = 0, int n = 0);

	Row operator[](int index);
};
struct Row
{
	int* array;

	Row(int* _array) : array(_array) {};

	int& operator[](int index)
	{
		return array[index];
	}
}; 

Array.cpp:

Row Array::operator[](int index)
{
	return Row(this->array[index]);
}
 

Oczywiście nie wstawiałem całego kodu, bo stwierdziłem nie ma to większego znaczenia. Wszystko co potrzebne oczywiście jest :) -> konstruktory, destruktory itp.

0

Przy wywołaniu
cout << array[1][2] np. visual pluje się o niezgodność typów. Że chce coutem Row wydrukować. Ale wydaję mi się, że wszystko jest ok, bo array[1] zwraca Row, a dalej [2] zwraca int...

1
#include <iostream>
using namespace std;

struct matrix {
	matrix(int w, int h): _w(w), _h(h), _data(new int[w * h]) {}
	
	int w() const { return _w; }
	int h() const { return _h; }
	
	int* operator[](int idx) { return _data + (idx * h()); }
	const int* operator[](int idx) const { return _data + (idx * h()); }
private:
	int _w, _h;
	int* _data;
};

ostream& operator<<(ostream& out, const matrix& m) {
	for(int i = 0; i < m.w(); ++i) {
		for(int j = 0; j < m.h(); ++j) {
			out << m[i][j] << " ";
		}
		out << "\n";
	}
	return out;
}

int main() {
	matrix m{5, 3};
	m[0][2] = 333;
	m[2][0] = 555;
	m[4][0] = 111;
	cout << m;
	return 0;
}
0

Męczyłem się z tym nie wiadomo jak długo, napisałem i w końcu znalazłem błąd... :P
Tworzyłem macierz dynamicznie przez wskaźnik dlatego była niezgodność.. ehh.
Temat do zamknięcia ;)
PS. Mimo wszystko dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1