szablony i problem z dostępem przy przeciążaniu operatora

0

Witam!
Mam problem i niestety nie mogę go rozwiązać. Otóż mam napisać m.in. własną klasę, która będzie działać jak wektor i iterator do niej. Mam mniej więcej takie pola:

 
template <typename T>
class MyVector {

	template <typename T> friend class MyIterator;



private:
	T* table;				
	int currentSize;			

public:

/*...*/
 

template <typename T>
class MyIterator {

	template <typename T> friend class MyVector;

private:
	int position;
	bool isNext;
	const MyVector<T>* vect;

public:

/*...*/

No i w klasie MyIterator mam takie cudo:

 
friend ostream& operator<< (ostream& out, const MyIterator<T>& iter) {


		out << iter.vect->table[position]<< endl;

		return out;
	}


Niestety, to nie zadziała, gdyż będzie błąd:

 error C2248: 'MyVector<T>::table' : cannot access private member declared in class 'MyVector<T>' 

W jaki sposób mogę w tym operatorze dostać się do table[position] ?

0

Po pierwsze:
friend MyVector<T>;
Po drugie, wystarczy w klasie MyVector:
typedef T *iterator;
T *begin()const { return table; }
T *end()const { return table+currentSize; }

0

Zmieniłem na: friend MyVector<T>;

Niestety, w poleceniu mam zadane, żeby przeciążyc m.in. operator <<, więc muszę jakoś problem rozwiązać.
Próbowałem zastosować Twoje begin i end i dla end wywala:
"error C2065: 'table' : undeclared identifier"

1

A co ma friend MyVector<T> do operator << ?
Małpa też słyszała że okulary pomagają na kiepski wzrok, kupiła okulary, wsadziła sobie w d*pe i stwierdziła że ludzie kłamią, okulary wcale nie pomagają na kiepski wzrok.
Pokaż gdzie te okulary wsadziłeś.

0

Ok, rozwiązałem problem, zrobiłem sobie funkcję w MyVector, która mi zwraca odpowiedni element tablicy do wyświetlenia.

Dzięki za poświęcony czas (choć z tą małpą mnie trochę poirytowałeś).

0

powinien to być operator[] a nie funkcja.

0

I jest :) Z rozpędu napisałem funckja, sorry, wina zmęczenia chyba :)

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