1

グローバル関数CallPrice(args)を作成しました。EuropeanOptionというクラスがあり、CallPriceというクラス関数があります。この関数は、EuropeanOptionクラスの変数を使用してグローバル関数を呼び出し、CallPriceを返します。「グローバルスコープに「CallPrice」がありません」というエラーが表示されます。

これはよくある問題だと思います。::を追加すると問題が解決するはずだという他のスレッドを検索しましたが、ここでは機能しません。エラーの原因を特定できますか?これをフレンド機能または他の回避策にする必要がありますか?

ありがとう!

ヘッダ:

#ifndef EuropeanOption_HPP
#define EuropeanOption_HPP

#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <boost/math/distributions/normal.hpp>

using namespace boost::math;
using namespace std;

namespace CLARK
{

struct EquityParms
{
    double T; // years until expiry
    double K; // strike price
    double sig; // vol
    double r; // risk free rate
    double b; // cost of carry  
};

// Global Call function
const double CallPrice(double T, double K, double sig, double r, double b, double EquityPrice);

class EuropeanOption
{
private:
    double T; // years until expiry
    double K; // strike price
    double sig; // vol
    double r; // risk free rate
    double b; // cost of carry
    double S; // current equity price   
    double ExactCallPrice;

public:
    EuropeanOption(); // default constructor (empty)
    EuropeanOption(const EquityParms& data, double EquityPrice); // constructor that sets parms
    void copy(const EuropeanOption& source);
    ~EuropeanOption();

    void init(const EquityParms& data, double EquityPrice); // initialize EquityParms

    const double CallPrice(); // trying to call global function in this function

};    
}

#endif

ソース:

#include "EuropeanOption_H.hpp"

namespace CLARK
{

const double CallPrice(double T, double K, double sig, double r, double b, double EquityPrice)
{// Global Function
    double temp = sig * sqrt(T);
    double d1 = (log(EquityPrice / K) + (r + (sig*sig) * 0.5) * T) / temp;
    double d2 = d1 - temp;

    normal_distribution<> myNormal(0,1);
    return (EquityPrice * cdf(myNormal,d1)) - (K * exp((b - r) * T) * cdf(myNormal, d2));
}    

EuropeanOption::EuropeanOption()
{// default constructor
    cout << "Default constructor call" << endl;
}

EuropeanOption::EuropeanOption(const EquityParms& data, double EquityPrice)
{// constructor that sets parms
    init(data, EquityPrice);
}

void EuropeanOption::copy(const EuropeanOption& source)
{
    T = source.T;
    K = source.K;
    sig = source.sig;
    r = source.r;
    S = source.S;
    b = source.b;
}

EuropeanOption::~EuropeanOption()
{   
}

void EuropeanOption::init(const EquityParms& data, double EquityPrice)
{
    T = data.T;
    K = data.K;
    sig = data.sig;
    r = data.r;
    S = EquityPrice;
    b = data.b;     
}

const double EuropeanOption::CallPrice()
{ // trying to call global function in this function
    return ::CallPrice(T, K, sig, r, b, S); // the global scope has no "CallPrice" ???
}    

}
4

3 に答える 3

2

CallPrice名前空間にありますCLARK。だから試してみてください

CLARK::CallPrice(/* ... */);
于 2012-10-09T02:00:27.500 に答える
1

CallPrice名前空間でグローバルを宣言しましたCLARK。構文は、グローバル名前空間または匿名名前空間で定義され::CallPriceた関数を使用しようとします。CallPrice代わりに、を使用してCLARK::CallPriceください。

于 2012-10-09T02:00:46.247 に答える
0

名前空間CLARKにいます:

return CLARK::CallPrice(T, K, sig, r, b, S);
于 2012-10-09T02:04:47.727 に答える