Nie mogę się odwołać do pola prywatnego w funkcji zaprzyjaźnionej.

0

Wie może ktoś może na czym polega błąd?
Deklaruje funkcję jako zaprzyjaźnioną, ale nie mogę się w niej odwołać do pól prywatnych, nie wiem occ.

#include <iostream>
#include <fstream>
using namespace std;

template <typename T>
class A
{
	private:
		int _pole;

	public:
		template <T>
		friend ifstream & operator >> (ifstream & ifs, A<T> t);
};

template <typename T>
ifstream & operator >> (ifstream & ifs, A<T> t)
{
	t._pole;
	return ifs;
}


int main ( )
{
	ifstream ifs;
	A<int> a;
	ifs >> a;
	return 0;
}
main.cpp:28:9:	instantiated from here
main.cpp:9:7: error: 'int A<int>::_pole' is private
main.cpp:19:2: error: within this context
0

Przede wszystkim operator>> jako drugi argument przyjmuje nie wartość, a referencję na obiekt. Po drugie, Twój kod nie ma najmniejszego sensu. Po co Ci szablony, skoro i tak deklarujesz zmienną _pole jako int? W dodatku brakuje Ci deklaracji konstruktorów.
No i co to ma być:

t._pole;

??

Dalej:

ifstream ifs;
A<int> a;
ifs >> a;

To również nie ma najmniejszego sensu. Deklarujesz strumień typu ifstream, ale nie otwierasz tam żadnego pliku, a chcesz wczytać ze strumienia dane. Jaki to ma mieć sens?

0

Z tą referencją to drobna pomyłka.
To jest tylko przykład, który napisałem, bo nie działa mi inny kod.
Pytanie pozostaje niewyjaśnione.

0

tak działa:

#include <iostream>
#include <fstream>
using namespace std;

template <typename T>
class A ;

template <typename T>
ifstream & operator >> (ifstream & ifs, A<T> &t) ;
 
template <typename T>
class A
{
	public:
		friend ifstream & operator >> <T> (ifstream & ifs, A<T> &t);
	private:
		int _pole;
};
 
template <typename T>
ifstream & operator >> (ifstream & ifs, A<T> &t)
{
	t._pole;
	return ifs;
}
 
 
int main ( )
{
	ifstream ifs("/dev/null");
	A<int> a;
	ifs >> a;
	return 0;
}

0

Dzięki :).

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