0

適切にコンパイルされていないように見えるかなり単純な C++ コードがあります。基本的に、GLOBAL.HPP ファイルで宣言されたいくつかのグローバルに定義された関数があり、GLOBAL.CPP ファイルで定義されています。次に、構造体データメンバーで構成されるクラス、EuroOption があります。クラス EuroOption には、グローバル関数とまったく同じことを本質的に行う独自のメンバー関数があります。そのため、同様に定義し、EuroOption メンバー関数定義内でグローバル関数を呼び出しました。下記を参照してください:

//
//GLOBAL.HPP
//

#ifndef GLOBAL_HPP
#define GLOBAL_HPP

#include <iostream>
#include <math.h>
#include <boost/math/distributions/normal.hpp>
#include <boost/math/distributions.hpp> // For non-member functions of distributions

using namespace std;
//using namespace boost::math;


namespace GLOBAL // Encapsulate Point in the Global namespace
{


struct EuroOptionData
{
    double r;       // Interest rate
    double sig;     // Volatility
    double K;       // Strike price
    double T;       // Expiry date
    double b;       // Cost of carry
};

double n(double x);
double N(double x);
double CallPrice(EuroOptionData od, double S);
double PutPrice(EuroOptionData od, double S);
double PutParity(EuroOptionData od, double S);
double CallParity (EuroOptionData od, double S);


} // Close namespace GLOBAL

#endif

EuroOption.HPP ファイルは次のとおりです。

//
//
//

#ifndef EUROOPTION_HPP
#define EUROOPTION_HPP


#include <string>
#include "Global.hpp"

using namespace std;
using namespace GLOBAL;

class EuroOption
{
private:        

public:
    struct EuroOptionData od;


    //EuroOption class functions
    EuroOption();                               // Default     call option
    EuroOption(const EuroOption& option2);      // Copy constructor
    virtual ~EuroOption();                      //Destructor

    //EuroOption Global Function Calls
    double EuroCallPrice(EuroOptionData od, double S);
    double EuroPutPrice(EuroOptionData od, double S);
    double EuroCallParity(EuroOptionData od, double S);
    double EuroPutParity(EuroOptionData od, double S);

    //EuroOption class operators
    EuroOption& operator = (const EuroOption& option2); //Assignment Operator

 };

#endif

そして、EuroOption.CPP ファイルのスニペット:

//
//
//

#include "EuroOption.hpp"
#include <cmath>
#include <iostream>

using namespace GLOBAL;
{

double EuroOption::EuroCallPrice(EuroOptionData od, double S)
{
    return CallPrice(od,S);
};

double EuroOption::EuroPutPrice(EuroOptionData od, double S)
{
    return CallPrice(od,S);
};

.....
...
}

そして最後に、機能をテストする Test.CPP ファイルのスニペット:

//
//
//

#include "Global.hpp"
#include "EuroOption.hpp"
#include <iostream>

using namespace GLOBAL;

int main()
{
EuroOption Batch1;      //Initialize EuroOption class object Batch1

    cout << "S1: "; double S1; cin >> S1;
    cout << "Stock Call Option: " << EuroCallPrice(Batch1.od, S1) << endl;
    cout << "Stock Put Option: " << EuroPutPrice(Batch1.od, S1) <<endl;
    cout << "Put Call Parity - Call Option:"<< EuroCallParity(Batch1.od, S1)<<endl;
    cout << "Put Call Parity - Put Option: "<< EuroPutParity(Batch1.od, S1)<<endl;
    //****None of these functions compile.  They all state "identifier EuroCallPrice (..etc.) is undefined."

    cout << "S1: "; double S1; cin >> S1;
    cout << "Stock Call Option: " << CallPrice(Batch1.od, S1) << endl;
    cout << "Stock Put Option: " << PutPrice(Batch1.od, S1) <<endl;
    cout << "Put Call Parity - Call Option:"<< CallParity(Batch1.od, S1)<<endl;
    cout << "Put Call Parity - Put Option: "<< PutParity(Batch1.od, S1)<<endl;
    //****These functions all compile properly.  They are the original global functions.

これはふるいにかけるコードがたくさんあることは承知していますが、どんなアイデアでも大歓迎です。上記のコードに示されているように、元のグローバル関数は完全に機能しますが、クラスの EuroOption 関数を使用してそのグローバル関数を呼び出したいと考えています。

どうもありがとう!

4

1 に答える 1

0

愚かな私!私がする必要があったのは、Batch1 で EuroCallPrice...etc 関数を呼び出すことだけでした。

ご助力いただきありがとうございます!

于 2013-06-12T00:51:48.453 に答える