IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[C++] Erreur de runtime: appel d'une fonction virtuelle pure


Sujet :

C++

  1. #1
    b4u
    b4u est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Points : 64
    Points
    64
    Par défaut [C++] Erreur de runtime: appel d'une fonction virtuelle pure
    Bonsoir,

    j'ai un probleme avec le morceau de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	ThreadWaitClients main_thread;
    		main_thread.run(0);
    Si je le place dans un bloc indépendant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {
    		ThreadWaitClients main_thread;
    		main_thread.run(0);
    	}
    j'obtiens l'erreur de runtime énoncée dans le titre du topic.
    Voici les définitions interressantes:
    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
    35
    36
    37
    38
    39
    40
    41
    42
    class ThreadWrapper
    {
    	bool _launched;
    	HANDLE _hd;
    	DWORD _id;
    	void *_args;
    	static DWORD WINAPI launch(LPVOID param);
    	virtual void exec(void *args) = 0;
     
    public:
    	ThreadWrapper();
    	virtual ~ThreadWrapper();
    	void run(void *args);
    };
     
    ThreadWrapper::ThreadWrapper()
    	: _launched(false)
    {
    }
     
     
    ThreadWrapper::~ThreadWrapper()
    {
    	if (_launched)
    		CloseHandle(_hd);
    }
     
     
    void ThreadWrapper::run(void *args)
    {
    	_args = args;
    	_hd = CreateThread(NULL, 0, launch, this, 0, &_id);
    	_launched = true;
    }
     
     
    DWORD WINAPI ThreadWrapper::launch(LPVOID param)
    {
    	ThreadWrapper *this_thread = (ThreadWrapper *)param;
    	this_thread->exec(this_thread->_args);
    	return 0;
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class ThreadWaitClients : public ThreadWrapper
    {
    	void exec(void *args);
     
    public:
    	ThreadWaitClients();
    	~ThreadWaitClients();
    };
     
    void ThreadWaitClients::exec(void *args)
    {
    	cout << "hello from thread waiting for clients" << endl;
    &#125;
    lorsque le code de départ est dans un bloc indépendant (et uniquement dans ce cas),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this_thread->exec&#40;this_thread->_args&#41;;
    appelle la méthode virtuelle pure de la classe ThreadWrapper!
    Quelqu'un pourrait m'expliquer pourquoi?
    Comme d'hab, merci d'avance pour votre aide précieuse =)

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 100
    Points
    100
    Par défaut Variable détruite trop tôt
    Dans un bloc indépendant, main_thread est une variable automatique locale au bloc : elle est détruite avant que run(0) se termine, ce qui cause l'erreur dont tu parles.
    Cette erreur n'apparaît pas s'il y a une autre instruction juste après (ie autre chose qu'une accolade fermante).

  3. #3
    b4u
    b4u est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Points : 64
    Points
    64
    Par défaut
    vu, merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/10/2013, 12h08
  2. Réponses: 15
    Dernier message: 07/06/2010, 20h25
  3. Erreur concernant l'appel d'une fonction
    Par indiannajones dans le forum Débuter
    Réponses: 11
    Dernier message: 05/10/2009, 15h15
  4. Réponses: 4
    Dernier message: 30/08/2007, 18h08
  5. Erreur a l'appel d'une fonction javascript
    Par linou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/03/2005, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo