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, botów: 0