IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

 C++ Discussion :

Transformer une strucutre C en classe C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut Transformer une strucutre C en classe C++
    Chères amies, chers amies du forum

    Je dispose de la structure en C suivante
    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
    16
    17
    18
    19
    20
    21
    22
    23
     
    struct BS : public BW
    {
    	BS(int n, double x0, double r, double s, double T=1): BW(n, T), bs(x0, r, s) {};
    	list <pair <double , double > >  operator()() 
    		{
    			BW::operator()();
    			std::transform(m_valeurs.begin(), m_valeurs.end(), m_valeurs.begin(), bs);
    			return m_valeurs;
    		};
     
    	private:
    			struct fun_bs : public std::unary_function<pair <double , double >, pair <double , double >> 
    				{
    						fun_bs(double x0, double r, double s): x0(x0), s(s), mu(r-0.5*s*s) {};
    						pair <double , double > operator()(const pair <double , double > &x) 
    							{
    								return pair <double , double >(x.first, x0*exp(mu*x.first + s*x.second));
    							};
    				private:
    						double x0, s, mu;
    				} bs;
    }
    avec m_valeurs définit comme suit dans la classe BW

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    list < pair <double , double > > m_valeurs ;
    et j'ai essayé de la transformer en classe C++ ainsi

    BS.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class BS : public BW
    {
    	public :
    			BS (int n, double X_0, double r, double s, double T=1) : BW(n, T), bs(X_0, r, s)
    				{
    				};
    			list <pair <double , double > > operator ()();
     
    	private :
    			fun_bs bs;
    };
    #endif
    BS.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include "BS.h"
     
    list <pair <double , double > > BS::operator ()() 
    {
    	BW::operator()();
    	transform(m_valeurs.begin(), m_valeurs.end(), m_valeurs.begin(), bs);
    	return m_valeurs;
    }
    fun_bs.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include "BS.h"
     
    class fun_bs : public std::unary_function<pair <double , double > , pair <double , double > >
    {
    public:
    		fun_bs(double X_0, double r, double s): m_X_0(X_0), m_s(s),m_mu(r-0.5*s*s) 
    			{}
    		pair <double , double > operator()(const pair <double , double > &x);
     
    private:
    			double m_X_0, m_s, m_mu;
    };
    fun_bs.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "fun_bs.h"
     
    pair <double , double > fun_bs::operator()(const pair <double , double > &x) 
    {
    	return pair <double , double >(x.first, m_X_0*exp(m_mu*x.first + m_s*x.second));
    }
    et le compilateur me renvoi ce message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'bs'
     initialisation de membre non conforme : 'bs' n'est ni une base ni un membre
    Merci

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Tou d'abord, la structure initiale est écrite en c++, et non en c. En c il n'y a pas de templates par exemple.
    Ensuite, j'ai l'impression qu'il y a une confusion entre les identificateurs Black_Scholes et BW.
    Enfin, attention si tu ne met pas le code de ta classe/structure template dans le .h. Voir cette faq

  3. #3
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Merci

    Pour ta correction il s'avere exact qu'il s'agissait de code C++, c'est la structure qui m'a induit en erreur, cependant je ne vois pas de template dans le code pourrait tu m'éclairer sur ce point.

    De plus dans le fun_bs.h je n'ai declarer qu'un constructeur, le reste est dans le fun_bs.cpp

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Ha oui, j'ai lu un peu vite, pardon. Avec ces pairs de partout, j'ai confondu.
    Tu peux donc oublier les 2 dernières lignes de mon précédent message.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ce que dit l'erreur, c'est que dans

    il ne sait pas ce qu'est "fun_bs" (c'est pour cela qu'il voudrait un ; avant bs)
    et ceci explique la ligne suivante : comme il ne sait pas ce qu'est un "fun_bs", il ne peut initialiser bs...

    Tu es sûr qu'il ne manque pas une ligne
    au début du fichier bs.h?

    Francois

Discussions similaires

  1. [Débutant] Transformer une classe en DLL
    Par rockley dans le forum C#
    Réponses: 2
    Dernier message: 06/04/2012, 17h38
  2. Transformer une classe en template
    Par BELLARABI dans le forum Débuter
    Réponses: 4
    Dernier message: 02/11/2011, 01h41
  3. [Flex4] Transformer une zone XML en classe
    Par magoer dans le forum Flex
    Réponses: 4
    Dernier message: 17/03/2011, 18h34
  4. Transformer une classe en classe générique
    Par alex2746 dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2010, 09h07
  5. Réponses: 1
    Dernier message: 07/09/2005, 22h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo