Problème d'éritage

Signaler
Messages postés
20
Date d'inscription
vendredi 18 avril 2008
Statut
Membre
Dernière intervention
7 août 2009
-
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
-
Salut,
Bon je vais essayer d'être clair mai avec l'héritage c'est pas facile
précision ce code est programmer sous geany et compiler avec g++
excuser les commentaires en français mai je débute et il faut pouvoir ce relire (déjà que mon français...)

Je cherche a en-capsuler du code système fait en C dans une class.
ce code Ser a crée un trhead
le problème est le suivant. :
j'ai donc ma première classe
qui a le cheminement suivant
classe mere -->[public m_thread_create ]-->[private static m_thread_call] --->[protect virtual m_call_out_procedure]
Bon donc jusque la c'est pas compliqué (hum....)
Le problème est que le code a exécuté ce situera dans un autre fichier *. cpp il faut donc que depuis ce fichier je puisse ajouter le code a exécuté
c'est pourquoi j'ai fait cela ici avec la class B (qui donc devrai ce retrouver dans un autre fichier. cpp)
mai a la compilation j'obtiens
[b]n file included from my_class_ptrhead.cpp:1,
from main.cpp:5:
my_class_ptrhead.h:28: erreur: two or more data types in declaration of ‘m_call_thread’
/b

bon je sais pas ou son passée les balise code sur ce forum je donne un lien plus approprier.
Tapez le texte de l'url ici.

6 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Faut mettre la déclaration d'héritage AVANT '{'

class B : public c_thread
{
   public:
       virtual void m_call_thread()
        {
                std::cout << "thread started" << std::endl;
        };
};
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Cela dit j'ai rien compris à ton histoire de fichiers différents.
Messages postés
20
Date d'inscription
vendredi 18 avril 2008
Statut
Membre
Dernière intervention
7 août 2009

Merci pour ta réponse, sa compile, mai curieusement le thread n'est pas exécuter dans la classe B

std::cout << "thread started" << std::end

n'affiche rien ??
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
C'est pas vraiment curieux, puisque tu ne crées aucune instance de classe B, pourquoi donc une méthode de B serait-elle appelée?
Bon, y a l'air d'y avoir pas mal de défauts dans ton code, tu débutes?

D'abord, on n'inclut JAMAIS de fichiers .cpp. Les déclarations des fonctions et classes sont placées dans des headers (.h), et le code implémenté dans les .cpp. Tu peux très bien utiliser dans un .cpp une fonction implémentée dans un autre fichier, du moment que tu la déclares partout où tu l'utilises. D'où l'intérêt des headers.
Par exemple :
// common.h
#pragma once
void Stub(void);

// file1.cpp
#include "common.h"

void Stub(void)
{
   return;
}

//file2.cpp
#include "common.h"

int main(void)
{
   Stub();
   return 0;
}


Clarifie déja ton code.
A quoi sert ta classe B?
Messages postés
20
Date d'inscription
vendredi 18 avril 2008
Statut
Membre
Dernière intervention
7 août 2009

Merci pour ta réponse.
Oui je débute, mon problème c'est que j'aprend rien si je ne pratique pas. Il faut dire que dans d'autre langage on ne séparait pas les déclarations et le <code> dans les. cpp
c'est vrai que c'est un peut le fouillis
tu veut dire que je devrai l'appeler avec une instance avec le mot clef new ?
Je vais donc bosser un peu pour essayer de le rendre plus correct en n’espérant pas faire le contraire.

Ma classe B servira dans ncurse, ou une boucle pour le clavier tournera en permanence de même pour la souris
j'y place donc un code euh disons pour faire plus simple et voir si ça tourne.
ncuse est aussi pas simple a comprendre car la doc est en anglait

Je crois qu'on peut s'en passer mai c'est dans le but d'apprendre, je trouve que faire tourner du code dans un thread demande plus de boulôt.
plus tard quand mes connaissances le permettront je passerai à l'optimisation.
voir les erreurs dans l'ensemble permet de mieux faire dans l'ensemble.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Il faut créer une instance de classe pour l'utiliser, soit sur la pile
(B c_b;) soit sur le tas (B*p_b=new B(...);). Toi tu créais simplement une instance de classe c_thread, à aucun moment il n'y a de référence à B.