Bonjour,
ca fait un moment que je cherche, mais je n'ai pas reussi a implementer mon bonheur :p
J'ai deux classes, Process qui gere le systeme, et User qui gere l'interface utilisateur.
User demande des saisies au clavier, et les envois a Process pour les gerer. Et Process, lance une methode User puis test l'etat dans lequel est User.
Donc User a besoin de Process.
Je veux pouvoir utiliser les methodes de Process avec User, mais egalement les objets qui composent Process. En gros, j'aimerai
que les deux classes soient "friend".
D'ou l'association.
Voici ce que j'aia vous montrer. J'ai simplifie au maximum (tout public, pas de test ...)
Voila le main
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 #ifndef USER_H #define USER_H class Process; class User{ public: int x; Process* process; User() { x = 0; } void attach(Process* proc){ process = proc; } void ad(void){ x = 2; //process->add(); } void substract(void){ x--; } }; class Process{ public: int angle; User *user; Process(){ angle = 0; } void attach(User* usr){ user = usr; } void add(void){ angle++; } void sub(void){ user->substract();; } }; #endif
Ca veut fonctionner de cette maniere, je ne dois donc pas etre loin. Le probleme c'est que mes classes ne "dialogues" que dans un seul sens.
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 #include "User.h" #include <stdio.h> #include <unistd.h> #include <iostream> using namespace std; // Test/example usage 'main' for simple associations. int main () { User user1; Process process1; // Associate user1.attach(&process1); process1.attach(&user1); process1.angle=3; user1.x=44; // Test association b1/a1 directly printf("This should be %d => %d\n", user1.x, process1.user->x); printf("this should be %d => %d\n\n", process1.angle, user1.process->angle); // user1.ad(); process1.sub(); printf("This should be %d => %d\n", user1.x, process1.user->x); printf("this should be %d => %d\n", process1.angle, user1.process->angle); return 0; }
SI je decommente le //process->add(); dans ad(), erreur de compilation
Vous allez me demander pourquoi je ne regroupe pas les deux classes en une seule ...method `void User::ad()':
invalid use of undefined type `class Process'
forward declaration of `class Process'
cc: /usr/lib/gcc-lib/ntox86/2.95.3/cc1plus error 33
En fait c'est pour un system embarque temps reel. Les deux classes sont des thread, parce que je ne veux pas rester bloque en attendant une entree clavier par l'utilisateur.
Qu'est-ce que j'ai fais d'horrible ??
Une maniere plus elegante (et juste) de faire ?
J'ai beaucoup cherche, mais je n'ai trouve aucun exemple, seulement un template http://www.flipcode.com/archives/A_S...te_for_C.shtml mais j'obtiens la meme erreur.
Merci beaucou pour n'importe quelles pistes ... je n'en dors (presque) plus![]()
Partager