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

Langage C++ Discussion :

erreur pointeur/référence héritage


Sujet :

Langage C++

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Points : 49
    Points
    49
    Par défaut erreur pointeur/référence héritage
    Bonjour,

    Dans mon main je souhaiterais appeler une méthode d'une classe et j'obtiens l'erreur "non-standard syntax; use '&' to create a pointer to member" sur la ligne de code suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << bs.BSV(A.getValue, bs.GetStrike, R, A.getVol, bs.GetMat) << endl;
    MAIN:

    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
    24
    25
    26
    27
    28
    29
     
    int main()
    {
    	double S;
    	double V;
    	double R;
    	double K;
    	double T;
     
    	cout << "Enter S" << endl;
    	cin >> S;
    	cout << "Enter V" << endl;
    	cin >> V;
     
    	cout << "Enter r" << endl;
    	cin >> R;
    	cout << "Enter K" << endl;
    	cin >> K;
    	cout << "Enter T" << endl;
    	cin >> T;
     
    	Stock A(S,V);
     
    	EuropeanCall bs;
     
    	cout << bs.BSV(A.getValue, bs.GetStrike, R, A.getVol, bs.GetMat) << endl;
     
    	return 0;
    }
    BSV est virtual et figure dans ma classe mère "option" et fille "EuropeanCall":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    double EuropeanCall::BSV(double S, double K, double rf, double sigma, double T)
    {
    	double BS = 0;
     
    	double d1 = (1.0*log(S / K) + (0.5*sigma*sigma)*T) / (sigma*sqrt(T));
    	double d2 = d1 - sigma*sqrt(T);
     
    	BS = 1.0*(S*exp(-rf*T)*N(1.0*d1) - K*exp(-rf*T)*N(1.0*d2));
     
     
    	return BS;
    }
    HEADER:

    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
    class Stock:public Asset
    {
    public:
     
    	Stock(double SP, double Vol);
    	~Stock();
     
    	virtual double getValue();
    	void SetPrice(double P);
    	void SetVol(double V);
    	double getVol();
     
    protected:
    	double S_price;
    	double S_vol;
    };
    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
    class Option :public Asset
    {
    public:
     
    	Option();
    	~Option();
     
    	virtual double BSV(double S, double O_strike, double r, double v, double O_maturity); 
    	virtual char GetType();
     
    	void SetStrike(double K);
    	void SetMat(double T);
    	double GetStrike();
    	double GetMat();
    	char type;
     
    protected:
    	double O_strike;
    	double O_maturity;
    	double O_price;
     
    };
    #endif
    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
    #ifndef __EuropeanCall__
    #define __EuropeanCall__
     
    #include <iostream>
     
    class EuropeanCall :public Option
    {
    public:
     
    	EuropeanCall();
    	~EuropeanCall();
     
     
    	virtual double BSV(double S, double K, double rf, double sigma, double T);
    	char GetType();
     
    protected:
    	char type;
     
    };
     
    #endif

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Sans compilateur, sans recherche Google, sans rien, cela me semble normal

    Remplace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bs.BSV(A.getValue, bs.GetStrike, R, A.getVol, bs.GetMat)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bs.BSV(A.getValue(), bs.GetStrike(), R, A.getVol(), bs.GetMat())
    Sinon, le compilateur voit que tu utilises les adresses des méthodes et t’aiguille sur une erreur de pointeurs de fonctions méthodes (ce qui est logique en somme )

Discussions similaires

  1. Réponses: 21
    Dernier message: 26/07/2011, 12h08
  2. Containers pointeurs et héritage
    Par philagui dans le forum C++
    Réponses: 2
    Dernier message: 01/05/2006, 15h52
  3. Pointeur et héritage...
    Par Zenol dans le forum C++
    Réponses: 2
    Dernier message: 08/03/2006, 12h31
  4. Passge par référence & héritage
    Par jsatla dans le forum C++
    Réponses: 11
    Dernier message: 04/01/2006, 17h44
  5. Réponses: 8
    Dernier message: 26/08/2004, 18h59

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