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) et l'erreur surviens (coller a la find du code)
Merci d'avance
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 fichier .h #ifndef DEF_PTREAD #define DEF_PTREAD #include <pthread.h> class c_thread { public: /*constructeur*/ c_thread(); /*destructeur*/ ~c_thread(); /* methode*/ /*creation du thread*/ int m_thread_create();/*1 -->static void m_thread_call();*/ /*atribut*/ protected: virtual void m_call_thread(){};/*3 --> ok*/ private: /*methode privée*/ static void *m_thread_call(void *this_); /*2 --->[protect virtual m_call_thread]*/ /*obtenir le handle cree precedament*/ int get_handle(); /*attribut priver*/ pthread_t handle_; }; class B{ public:c_thread virtual void m_call_thread() { std::cout << "thread started" << std::endl; }; }; #endif //fin des macro fichier .cpp #include "my_class_ptrhead.h" /*constructeur*/ c_thread::c_thread() {}; /*destructeur*/ c_thread::~c_thread(){}; /*creation du thread et renvoi du handle*/ int c_thread::m_thread_create() { pthread_create(&handle_, 0, c_thread::m_thread_call, static_cast<void *>(this)); return c_thread::get_handle() ; }; /*obtenir le handle cree precedament*/ int c_thread::get_handle() { return handle_; }; void *c_thread::m_thread_call (void *data){ c_thread *base = static_cast<c_thread *>(data); base->m_call_thread(); return 0; }; fichier main.cpp #include <iostream> #include <string> #include <cstring> #include "my_class_ncurse.cpp" #include "my_class_ptrhead.cpp" int main() { c_thread thread_p; int id1_H = 0; id1_H = thread_p.m_thread_create(); std::cout << id1_H << std::endl; }; erreur: In 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
Partager