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++/CLI Discussion :

Arguments pour pointeur de fonction


Sujet :

C++/CLI

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Par d�faut Arguments pour pointeur de fonction
    Bonjour,

    J'ai une classe defini comme telle:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <PayOff1_Ex21.h>
    #include <MinMax.h>
     
    PayOff::PayOff(double Strike_, double (*f_)(double ,double ))
    {
    	Strike = Strike_;
    	FunctionPtr = f_;
    }
     
    double PayOff::operator ()(double spot) const
    {
    	return FunctionPtr(Strike , spot);
     
    }
    Mais j'ai un probleme d'arument (je pense) lorsque j'essaye de l'appeller dans le code ci-dessous:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include<SimpleMC_Ex21.h>
    #include<iostream>
    using namespace std;
     
    double digitaloptions(double , double );
     
    int main()
    {
     
    	double Expiry;
    	double Strike; 
    	double Spot; 
    	double Vol; 
    	double r; 
    	unsigned long NumberOfPaths;
     
    	cout << "\nEnter expiry\n";
    	cin >> Expiry;
     
    	cout << "\nEnter strike\n";
    	cin >> Strike;
     
    	cout << "\nEnter spot\n";
    	cin >> Spot;
     
    	cout << "\nEnter vol\n";
    	cin >> Vol;
     
    	cout << "\nr\n";
    	cin >> r;
     
    	cout << "\nNumber of paths\n";
    	cin >> NumberOfPaths;
     
        PayOff callPayOff(Strike, digitaloptions);
        PayOff putPayOff(Strike, digitaloptions);
     
    	double resultCall = SimpleMonteCarlo2(callPayOff,
                                              Expiry,                                           
    							              Spot, 
    							              Vol, 
    							              r, 
    						                  NumberOfPaths);
     
        double resultPut = SimpleMonteCarlo2(putPayOff,
                                             Expiry,                                           
    							             Spot, 
    							             Vol, 
    							             r, 
    						                 NumberOfPaths);
     
    	cout <<"the prices are " << resultCall << "  for the call and " 
                                        << resultPut << " for the put\n";
     
        double tmp;
        cin >> tmp;
     
    	return 0;
     
    }
     
    double digitaloptions(double Spot_d, double Strike_d)
    {
    	//return max(Spot_d-Strike_d,0);
     
    	return 0;
     
    }
    Le message d'erreur que j'obtiens est le suivant:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    1>SimpleMCMain2_Ex21.cpp
    1>c:\moondragon\distancelearning\cpp\code\chap2.1\simplemcmain2_ex21.cpp(35) : error C2664: 'PayOff::PayOff(double,double (__cdecl *)(double,double))' : cannot convert parameter 2 from 'double' to 'double (__cdecl *)(double,double)'
    1> There is no context in which this conversion is possible
    1>c:\moondragon\distancelearning\cpp\code\chap2.1\simplemcmain2_ex21.cpp(36) : error C2664: 'PayOff::PayOff(double,double (__cdecl *)(double,double))' : cannot convert parameter 2 from 'double' to 'double (__cdecl *)(double,double)'
    1> There is no context in which this conversion is possible
    1>Build log was saved at "file://c:\MoonDragon\DistanceLearning\cpp\code\chap2.1\Debug\BuildLog.htm"
    1>chap2.1 - 2 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    D'avance merci pour votre aide.

  2. #2
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par d�faut
    Comme pour tout pointeur, ne pas oublier la bonne vieille esperluette...

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Par d�faut
    Peux tu etre plus explicite?

  4. #4
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    PayOff callPayOff(Strike, &digitaloptions);

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Par d�faut
    Nein, ca marche pas non plus.

  6. #6
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par d�faut
    Juste comme �a, �a va �tre difficile de t'aider.

    Ou tu fournis un code complet.

    Ou tu isoles le probl�me dans un petit source.

    Ou tu fais de l'objet (on est en C++ apr�s tout) avec de l'h�ritage et une m�thode virtuelle en lieu et place de ton pointeur de fonction f.

    Pour information, ce code fonctionne. A vrai dire, l'esperluette n'est pas obligatoire pour un pointeur de fonction mais j'avais un doute pour Visual.
    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
     
    #include <iostream>
     
    class PayOff {
    public:
      PayOff(double s, double (*f)(double, double)) {
        std::cout << f(s, s) << std::endl;
      }
    };
     
    double digitaloptions(double a, double b) {
      return a * b;
    }
     
    int main() {
      PayOff payoff(2.0, &digitaloptions);
      return 0;
    }

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Par d�faut
    Hello,

    Merci pour ton aide. Voici les fichiers en question.
    Fichiers attach�s Fichiers attach�s

  8. #8
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par d�faut
    ??????????

    Il compile tr�s bien ton code. Il y a juste une erreur de link sur le constructeur SimpleMonteCarlo2(PayOff const&, double, double, double, double, unsigned long). L'argument strike est en trop dans le .cpp.

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Par d�faut
    Ah, c'est comme les petits fautes d'orhographes : soi meme on a du mal a le voir.

    Encore merci pour ton aide.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Type d'argument pour appel de fonction dans une DLL
    Par Lio590 dans le forum API, COM et SDKs
    R�ponses: 3
    Dernier message: 06/07/2011, 16h28
  2. [DOM] Onmouseover pour lancer une fonction avec arguments
    Par Trock dans le forum G�n�ral JavaScript
    R�ponses: 11
    Dernier message: 01/06/2007, 13h31
  3. pb de pointeur de fonction pour thread
    Par melleb dans le forum MFC
    R�ponses: 2
    Dernier message: 09/02/2007, 16h46
  4. Type de class et arguments pour fonctions et new
    Par Alfred12 dans le forum C++
    R�ponses: 15
    Dernier message: 19/01/2007, 01h02
  5. [debutant] correspondance JAVA C++ pour pointeur de fonction
    Par davidoff_tls dans le forum Langage
    R�ponses: 7
    Dernier message: 15/04/2004, 09h13

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