Association entre deux classes (partager les methodes)
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 ...)
Code:
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 |
Voila le main
Code:
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;
} |
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.
SI je decommente le //process->add(); dans ad(), erreur de compilation
Citation:
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
Vous allez me demander pourquoi je ne regroupe pas les deux classes en une seule ...
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 :aie: