2013-06-12 3 views
0

컴파일이 제대로되어 있지 않은 C++ 코드가 있습니다. 본질적으로, GLOBAL.HPP 파일에 선언 된 전역 적으로 정의 된 함수가 있고 내 GLOBAL.CPP 파일에 정의되어 있습니다. 그런 다음 구조체 datamember로 구성된 클래스 인 EuroOption이 있습니다. EuroOption 클래스는 본질적으로 전역 함수와 똑같은 일을하는 고유 한 멤버 함수를 가지고 있습니다. 그래서 비슷하게 정의하고 EuroOption 멤버 함수 정의 내부에서 전역 함수라고 부릅니다. 아래를 참조하십시오 :컴파일러 오류 - 식별자가 정의되지 않았습니다.

// 
// 
// 

#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 파일의 미리보기 : 여기

// 
//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 파일입니다 드디어

// 
// 
// 

#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

컴파일하지 않는 함수는 * 클래스의 객체에서 호출해야하는 * 멤버 함수 *입니다. in (이 경우 'EuroOption'). 이전에 선언 한 '일괄 1'에서 호출하도록 했습니까? –

답변

0

어리석은! 내가해야 할 일은 Batch1의 EuroCallPrice ... etc 함수를 호출하는 것이었다.

도움 주셔서 감사합니다.

관련 문제