Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Architecture programme : erreur lors de la création d'une classe virtuelle pure par une méthode statique
    Bonjour,

    Je suis coincé sur un programme assez tiré par les cheveux relativement à mon niveau.
    voilà le contexte : une classe factory statique doit créer un objet ParamsIni héritant de Params(classe virtuelle pure) (Params* w_params = new ParamsIni(...) depuis sa méthode statique buildParameters
    Je veux ensuite créer un objet View héritant de IView(classe virtuelle pure) qui prend en paramètres le pointeur sur l'objet Params; (IView* wp_instance = new View(Factory::buildParameters(...))

    mais ça marche pas...

    (je précise ici que Params et ParamsIni sont dans une dll qui est utilisée par la dll qui contient Factory, View et IView.
    Voilà les parties de code intéressantes)

    Factory.h
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    class Params; //deux cas de figure : Quand je met cette ligne et quand je ne la met pas
    class Factory
    {
    public:
          __declspec(dllimport) static Params* buildParameters(const std::string& aip_configFile);//Erreur de synthaxe : absence de ';' devant '*'
    
          __declspec(dllimport) static IView* create(const std::string& aip_configFile);
         //constructeur et destructeur vides surchargés blabla
    }


    Factory.cpp
    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
    Params* Factory::buildParameters(const std::string& aip_configFile)  //Erreur ! 'buildParameters' n'est pas membre de 'Factory'
    {
         Params* w_params = new ParamsIni(aip_configFile);     //Erreur !! 'initialisation': impossible de convertir de 'ParamsIni*' en 'Params*' et Spécificatuur de type manquant - int est pris en compte par défaut
         //w_params->blablabla pas important
    
         return w_params      //je retourne mon objet Params bien initialisé
    }
    
    IView* Factory::create(const std::string& aip_configFile)
    {
         IView* wp_instance = new View(Factory::buildParameters(aip_configFile));
         //sans importance
         return wp_instance;
    }


    Params.h
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Params
    {
    public:
         __declspec(dllimport) Params(const std::string& aip_configFile);
         //blabla méthodes virtuelles pures implémentées dans ParamsIni
    }


    Params.cpp juste le constructeur qui range le paramètre dans un attribut et les définition du blabla. je passe

    là ça devient intéressant
    ParamsIni.h
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class ParamsIni : public Params
    {
    public:
         __declspec(dllimport) ParamsIni(const std::string& aip_configFile);
         //blabla implémentation des méthodes virtuelles de Params
    }


    ParamsIni.cpp
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ParamsIni(const std::string& aip_configFile):
         Params(aip_configfile)
    {
          //blabla
    }



    l'architecture de View et IView est la même que pour Params et ParamsIni. IView est virtuelle pure et ses méthodes sont implémentées dans View.
    View (et donc IView) prennent en paramètre un pointeur sur objet Params qui sera rangé dans les attributs.

    Et lorsque que j'essaie de build la librairie, il se passe les erreurs que je met en couleur. C'est étrange car lors de la création de IView via View, avant que je ne change mon code, ça fonctionnait très bien. Et pourquoi builParameters n'est pas considéré comme membre de Factory alors que create l'est ? Je suis un peu perplexe.

    Si il y a des fautes de synthaxe c'est normal, j'ai tout tapé à la main, mon pc de développement n'est pas connecté à internet.

    heeelp

  2. #2
    Futur Membre du Club
    ça fonctionne
    En bidouillant les include, les prédéfinition de classes dans les headers ça a fini par marcher. Je sais pas trop ce que j'ai fait, je me suis rendu compte que ça marchait alors que je vérifiais que c'était pas une erreur de nom de domaines (je ne les ai pas mis dans le code, mais il y a des noms de domaines imbriqués de partout). Je supprimerais bien la discussion, si quelqu'un sait comment faire

###raw>template_hook.ano_emploi###