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:
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:
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:
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:
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:
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