Bonjour,
Merci pour la réponse

Sur le premier point, il n'y avait effectivement pas d'autre référence que ce lien.
En fait, j'ai posé ce lien parce que je n'avais pas le #include du tout dans le code (erreur de compile pour type inexistant). Je vais vérifier encore une fois ce que jai dit, mais il semble bien que ce soit le cas.
Voici un exemple de code généré. Il s'agît du header obtenu après génération de classes à l'une desquelles j'ai ajouté un lien de dépendance vers la classe dBooleen (la première). Bien sur, l'option de génération du #include dans le source s'y trouvait.
- Code: Select all
#ifndef _TAPPELFONCTION_H
#define _TAPPELFONCTION_H
#include "Types/dBooleen.h"
#include <QString>
#include "AST/targument.h"
#include "AST/texpression.h"
#include "Types/dType.h"
class dTexte;
class TListeExpressions;
class TFonction;
//Ne pas oublier de replacer le #include dBooleen dans le CPP aprs chaque gnration.
class TAppelFonctionNR {
private:
dTexte & nom;
TListeExpressions &arguments;
public:
TAppelFonctionNR(const TAppelFonctionNR & _a_);
TAppelFonctionNR(const TAppelFonctionNR && _a_);
TAppelFonctionNR(const dTexte & _n_, const TListeExpressions & args);
protected:
TAppelFonctionNR();
public:
~TAppelFonctionNR();
virtual TAppelFonctionNR &clone() const = 0;
//Cette opration permet de dupliquer des objets qui sont des temporaires.
//Se fait toujours par new, mais en effectuant un move sur la classe.
virtual TAppelFonctionNR &clonerval() const = 0;
bool operator ==(const TFonction & comp) const;
virtual QString ToString(int indent) const;
};
class TAppelFonction : public TExpression, public TAppelFonctionNR {
private:
TFonction & fonction;
TAppelFonction() = delete;
public:
//Constructeur de copie.
//Il n'y a pas besoin de constructeur move parce que lla pile des fonctions est transmise par adresse.
//Il ne faut surtout pas la copier.
TAppelFonction(const TAppelFonction & fct);
TAppelFonction(const TAppelFonctionNR & appel, TFonction & fct);
~TAppelFonction();
virtual TAppelFonction &clone() const;
//Cette opration permet de dupliquer des objets qui sont des temporaires.
//Se fait toujours par new, mais en effectuant un move sur la classe.
virtual TAppelFonction &clonerval() const;
virtual dType Type() const;
virtual QString ToString(int indent) const;
};
class TAppelFonctionNonTrouvee : public TExpression, public TAppelFonctionNR {
private:
dTexte & message;
public:
TAppelFonctionNonTrouvee(const TAppelFonctionNonTrouvee & src);
TAppelFonctionNonTrouvee(TAppelFonctionNonTrouvee && src);
TAppelFonctionNonTrouvee(const TAppelFonctionNR & appel, const dTexte & msg);
~TAppelFonctionNonTrouvee();
virtual TAppelFonctionNonTrouvee &clone() const;
//Cette opration permet de dupliquer des objets qui sont des temporaires.
//Se fait toujours par new, mais en effectuant un move sur la classe.
virtual TAppelFonctionNonTrouvee &clonerval() const;
virtual dType Type() const;
virtual QString ToString(int indent) const;
};
#endif
On constate bien qu'aucune référence à la portée dBooleen n'existe.
Si je déplace le #include vers le fichier source, ça compile toujours correctement (le forward existe déjà dans un des fichiers inclus).
Si je le retire, j'obtiens une erreur de compile dans le .cpp (la classe est utilisée dans le corps d'une fonction).
Détrompez moi, mais pour moi, la génération du #include devrait bien se faire dans le source.
J'en conclus que dans ce cas, le générateur n'a effectivement pas le comportement attendu.
J'en profite pour signaler quelque chose que j'ai oublié hier : vous remarquerez que, dans le header il manque des accentuées.
Cela se produit également dans les chaînes de caractères ("aération" est généré "aration"). J'utilise bouml 6.2 sous ubuntu 12.10. Est-ce un bug de bouml? (je l'ai utilisé aussi sous w7 et n'en ai pas le souvenir), sinon connaissez-vous un réglage permettant que cela ne se produise pas?
Merci encore

A bientôt
Marc