Bonjour � tou(te)s,

J'ai un souci que je n'arrive vraiment pas � r�gler et plus je m'y essaye, plus j'ai l'impression de ne pas voir l'�vidence.
Je cherche donc � faire un client Telnet. Pour cela, j'ai donc une classe Telnet qui me permet de me connecter � un serveur. Pour bien recevoir les donn�es du serveur je lance un Thread qui va v�rifier si j'ai recu des donn�es de temps en temps. Pour info, j'utilise la SFML tout ca :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Telnet
{
public :
    //Constructeur par défaut
    Telnet(void);
    //Connexion à un site
    void Connect(const std::string& host, unsigned short port = 23);
    //Pour vérifier qu'on est bien connecté
    bool IsConnected(void);
 
private :
    //Les informations de connexion
    std::string     mHostName;
    sf::IPAddress   mHost;
    unsigned short  mPort;
    //La socket permettant de recevoir et d'envoyer des données
    sf::SocketTCP   mConnection;
    //Booléen permettant de savoir si on est toujours connecté ou pas
    bool            mIsConnected;
    //Le thread de réception des données envoyées par le serveur
    ReceptionThread mReceptionThread;
};
La methode lance donc le Thread qui est une classe d�riv�e afin qu'il fasse bien ce que je souhaite (m�thode virtuelle red�finie) :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
class ReceptionThread : public sf::Thread
{
private:
    virtual void Run ()
    {
        std::cout<<"Deconnexion"<<std::endl;
        mIsConnected = false;
    }
};
Bon, ici ce n'est qu'un test, donc je d�connecte tout de suite. Voici le code du main :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    Telnet t;
 
    t.Connect("crawl.akrasiac.org");
 
    while (t.IsConnected())
    {
        //On attend sans rien faire
    }
 
    return EXIT_SUCCESS;
}
Mes soucis :
- Soit je d�finis une classe avant l'autre et j'ai des soucis puisque l'autre n'est pas encore d�finie. Je sais qu'il faut d�finir partiellement la premi�re afin de ne pas faire d'erreur, mais je n'arrive plus � retrouver comment on fait :/
- De plus, l'acc�s � un membre priv�, c'est moyen. Je ne veux, bien entendu, pas avoir de setter public ca n'a rien � faire dans l'interface.

J'ai tent� de d�finir ReceptionThread dans la classe Telnet en priv� puisque l'utilisateur ne devrait pas y avoir acc�s et de rendre celle-ci amie de la classe Telnet, masi ca ne marche pas :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Telnet
{
public :
    //Constructeur par défaut
    Telnet(void);
    //Connexion à un site
    void Connect(const std::string& host, unsigned short port = 23);
    //Pour vérifier qu'on est bien connecté
    bool IsConnected(void);
 
private :
    friend class ReceptionThread;
 
    class ReceptionThread : public sf::Thread
    {
    private:
        virtual void Run ()
        {
            std::cout<<"Deconnexion"<<std::endl;
            mIsConnected = false;
        }
    };
 
    //Les informations de connexion
    std::string     mHostName;
    sf::IPAddress   mHost;
    unsigned short  mPort;
    //La socket permettant de recevoir et d'envoyer des données
    sf::SocketTCP   mConnection;
    //Booléen permettant de savoir si on est toujours connecté ou pas
    bool            mIsConnected;
    //Le thread de réception des données envoyées par le serveur
    ReceptionThread mReceptionThread;
};
Citation Envoy� par Debug
error: invalid use of nonstatic data member 'Telnet::mIsConnected'
Merci d'avance � ceux (celles ?) qui auraient des (une au moins ?) id�es !

PS : post identique sur le SdZ, mais ils r�pondent pas