2017-04-15 1 views
0

함수에 대한 포인터를 매개 변수로 갖는 C++ 11의 구문을 정의하는 방법에 대해서는 의심의 여지가 있습니다. 다양한 유형의 보수를 관리하는 Payoff 클래스를 만들었습니다. 옵션에는 파업 및 현물 가격이 주어진다. 또한 동일한 구조 (매개 변수 및 반환 유형) 및 이러한 유사한 기능을 관리하기위한 목적으로 기능에 대한 포인터를 사용하여 여러 유형의 경고에 대해 세 가지 기능을 정의했습니다. 여기에 헤더 :생성자 C++ 및 함수 매개 변수 포인터

#ifndef PAYOFFb_H 
#define PAYOFFb_H 
#include <MinMax.h> 
class PayOff 
{ 
public: 
    typedef double (*pf)(const double& Strike, const double& Spot); 
    double Call(const double& Strike, const double& Spot){ return max(Spot - Strike, 0.0); }; 
    double Put(const double& Strike, const double& Spot){ return max(Strike - Spot, 0.0); }; 
    double Digital(const double& Strike, const double& Spot){ return Spot > Strike ? 1 : 0; }; 
    PayOff(double Strike_, pf TheOptionsType_) : Strike(Strike_), TheOptionsType(TheOptionsType_){}; 
    double operator()(double Spot) const; 
private: 
    double Strike; 
    pf TheOptionsType; 
}; 
#endif 

몸 :

#include "Payoff1b.h" 
#include <MinMax.h> 
double PayOff::operator()(double spot) const 
{ 
    return (*TheOptionsType)(Strike, spot); 
}; 

다음과 같은 주요 코드 사용 :

[...] error C2664: 'PayOff::PayOff(const PayOff &)' : cannot convert argument 1 from 'double' to 'const PayOff &' 

: 내가 생성자에 대해이 오류가

int main() 
{ 
double Strike; 
cout << "\nEnter strike\n"; 
cin >> Strike; 
PayOff callPayOff(Strike, PayOff::Call); 
PayOff putPayOff(Strike, PayOff::Put); 
PayOff digitalPayOff(Strike, PayOff::Digital); 
return 0; 
} 

을 누군가가 나에게 무엇을 설명 할 수 있는지 친절하게 묻는다. 작동하지 않는다

+0

관련 오류 메시지가 아니라고 :

그것은 그것을 위해 당신은 당신의 Call, Put, Digital 정적 일 필요, 2의 경우처럼 보인다. 모두 게시 해보십시오. – aschepler

+0

표시하지 않은 코드에 해당하는 오류 메시지가 아닌 관련 오류 메시지를 표시하면 도움이됩니다. 생성자가 수락하고 저장하는 포인터는 비 멤버 함수입니다. 제공되는 함수는 멤버 함수입니다. 그것들은 다른 것들입니다. 따라서 컴파일러가 "멤버 함수 포인터"를 "비 멤버 함수 포인터"로 변환하려고 할 때의 에러입니다. – Peter

+0

여기서 C++ 11은 어디에서 사용합니까? Call/Put/Digital 정적 함수를 만들어야 생성자의 인수로 넣을 수 있습니다. – Sklert

답변

0

멤버 함수 포인터 또는 일반 함수 포인터를 사용하려고하는지 확실하지 않습니다.

class PayOff 
{ 
public: 
    typedef double(*pf)(const double& Strike, const double& Spot); 
    static double Call(const double& Strike, const double& Spot) 
    { 
     return max(Spot - Strike, 0.0); 
    }; 
    static double Put(const double& Strike, const double& Spot) 
    { 
     return max(Strike - Spot, 0.0); 
    }; 
    static double Digital(const double& Strike, const double& Spot) 
    { 
     return Spot > Strike ? 1 : 0; 
    }; 
    PayOff(double Strike_, pf TheOptionsType_) : Strike(Strike_), TheOptionsType(TheOptionsType_) {}; 
    double operator()(double Spot) const; 
private: 
    double Strike; 
    pf TheOptionsType; 
}; 
+0

이 경우 컴파일러에서 정적 키워드가 필요하다는 것을 알지 못했습니다. 어쨌든, 나는 일반 함수 포인터를 찾고 있었고 이제는 코드가 작동 중이다. Pavel – aforgio

+0

@aforgio 기꺼이 도와 줘서 고맙습니다. 대답을 받아들이는 것을 잊지 마라. – Pavel