2013-06-12 54 views
0

我有一个相当简单的C++代码,似乎没有正确编译。基本上,我有一些全局定义的函数,在我的GLOBAL.HPP文件中声明,并在我的GLOBAL.CPP文件中定义。然后我有一个类EuroOption,它由一个struct datamember组成。 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类来调用该全局函数。

非常感谢!

+0

好吧,'EuroCallPrice'似乎是一个成员函数,而'CallPrice'不是...... –

+1

不编译的函数是*成员函数*,它必须在任何类的对象上调用在这种情况下('EuroOption')。您是否打算在早些时候宣布的“Batch1”上打电话给他们? –

回答

0

傻我!我需要做的就是在Batch1上调用EuroCallPrice ...等功能。

感谢您的帮助!