OVH Cloud OVH Cloud

Classe mutuellement liées (pas très clair ce titre...)

4 réponses
Avatar
Miguel
Bonjour,
je pose une question qui a déjà été posée sur ce groupe je crois, mais je ne
me souviens pas de la réponse et je n'arrive retrouver pas mon bonheur, je
vais donc remettre ca, désolé...

Je voudrais savoir comment déclarer 2 classes qui s'utilisent l'une l'autre
dans un même fichier source
Exemple:

class Point
{
protected:
int l;
int c;

public:
//...
Point operator+(Vect v); //renvoie l'image par la translation de
vecteur v
};

class Vect
{
protected:
int dl;
int dc;

public:
//...
Vect(Point orig, Point dest); //construit le vecteur à partir de 2
points
};

J'ai évidemment un message d'erreur qui me dit que le type Vect n'est pas
défini et tout...
Je cherche une solution à ce problème, si toutefois il en existe une...
Merci d'avance
Miguel

4 réponses

Avatar
Gregoire Mercier
IL faut juste déclarer la classe vect avant :

class Vect;

class Point
{
protected:
int l;
int c;

public:
//...
Point operator+(Vect v); //renvoie l'image par la translation d e
vecteur v
};

class Vect
{
protected:
int dl;
int dc;

public:
//...
Vect(Point orig, Point dest); //construit le vecteur à partir de 2
points
};

Comme cela, ça devrait aller.

Greg

Avatar
Miguel
class Vect;

class Point
{
protected:
int l;
int c;

public:
//...
Point operator+(Vect v); //renvoie l'image par la translation de
vecteur v
};

class Vect
{
protected:
int dl;
int dc;

public:
//...
Vect(Point orig, Point dest); //construit le vecteur à partir de 2
points
};

Comme cela, ça devrait aller.



Ca marche impec', cependant on ne peut pas utiliser les membres de Vect dans
des fonctions inline (ce qui n'est pas très grave, c'est juste pour
l'anecdote)
Merci

Avatar
Gregoire Mercier
A tout hasard, essaie :


class Vect;

class Point
{
protected:
int l;
int c;

public:
//...
Point operator+(Vect v); //renvoie l'image par la translation d e
vecteur v



int foo( Vect v );

};

class Vect
{
protected:
int dl;
int dc;

public:
//...
Vect(Point orig, Point dest); //construit le vecteur à partir de 2
points



int bar ( Point p );

};





inline void Point::foo( Vect v ) {
return v.bar( *this ); }


... peut-être que....


Greg


Avatar
Pierre Lairez
Personnellement, je ferais ceci:

class Vect;

class Point
{
protected:
int l;
int c;

public:
//...
Point operator+(const Vect& v);
vecteur v
};


class Vect
{
protected:
int dl;
int dc;

public:
//...
Vect(const Point& orig, const Point& dest);
points
};


inline Point operator+(const Vect& v) { ... }