Forum de la communauté SFML

Aide => Système => Discussion démarrée par: Specula le Septembre 06, 2013, 05:05:25 pm

Titre: Thread et adressage d'un pointeur sur membre
Posté par: Specula le Septembre 06, 2013, 05:05:25 pm
Bonjour,

Cela fait quelques jours que je me suis mis à utiliser des thread pour diverses raisons et, aujourd'hui, je suis tombé sur une erreur incompréhensible pour moi.

Voici l'erreur donné par mon compilateur :
C:\SFML-2.1\include\SFML\System\Thread.inl|39|error: must use '.*' or '->*' to call pointer-to-member function in
'((sf::priv::ThreadFunctor<void (A::*)()>*)this)->sf::priv::ThreadFunctor<void (A::*)()>::m_functor (...)',
 e.g. '(... ->* ((sf::priv::ThreadFunctor<void (A::*)()>*)this)->sf::priv::ThreadFunctor<void (A::*)()>::m_functor) (...)'|

Malgré une recherche sur internet sur l'opération ".*" et sa signification, je ne comprends toujours pas l'erreur. (Le numero de ligne me donne l'accolade de fin du main.)

Voici le code minimale reproduisant l'erreur :

#include <SFML/System.hpp>
#include <iostream>
#include <string>

class A
{
public :
    A()
    {
        myTh = new sf::Thread(&A::Fct);
        mot = "test";
    }
    void Launch()
    {
        myTh->launch();
        myTh->wait();
    }
    ~A()
    {
        delete myTh;
    }

private :
    void Fct()
    {
        std::cout << mot.size();
    }
    sf::Thread* myTh;
    std::string mot;
};

int main()
{
    A a;
    a.Launch();
    return 0;
}

Merci d'avance
Titre: Re : Thread et adressage d'un pointeur sur membre
Posté par: Laurent le Septembre 06, 2013, 06:20:36 pm
myTh = new sf::Thread(&A::Fct, this);
Titre: Re : Thread et adressage d'un pointeur sur membre
Posté par: Specula le Septembre 06, 2013, 06:54:55 pm
Merci! Ça marche !
Mais, en fait, pourquoi a-t-il besoin du pointeur this ?
Titre: Re : Thread et adressage d'un pointeur sur membre
Posté par: Laurent le Septembre 06, 2013, 08:30:08 pm
Comment veux-tu appeler une fonction membre non-statique sans objet ?