2013-05-31 2 views
0

저는 C++을 처음 사용하기 때문에 다음 코드로 인해 어려움을 겪습니다. 별표 표시된 줄에 계속 오류가 발생합니다. 나는 그것이 효과가 없지만 도움이되는 것을 찾지 못한 것에 대해 조사를 해왔다. 문제를 볼 수 있으며이를 해결하기 위해 무엇을해야하는지 설명하십시오.C++ 함수 포인터 배열 오류

// FunctionArray.cpp : Defines the entry pofloat for the console application. 
// 

#include "stdafx.h" 
#include <string> 
#include <iostream> 

using namespace std; 
class MathPrg{ 
public: 
    MathPrg(float num1, float num2) 
     { 
     num1 = num1; 
     num2 = num2; 
     int choice = presentChoices(); 
     getAnswer(choice, num1, num2); 
     } 

    void getAnswer(int choice,float num1, float num2){ 

     typedef float (MathPrg::*f[4]) (float, float); 
     **f set = {add, subtract, multiply, divide}; 
     float answer = (*set[choice])(num1, num2);** 
     cout<< answer; 
     } 

    float add(float num1, float num2){ 
     return num1+num2;} 
    float subtract(float num1, float num2){ 
     return num1-num2;} 
    float multiply(float num1, float num2){ 
     return num1*num2;} 
    float divide(float num1, float num2){ 
     return num1/num2;} 
    int presentChoices(){ 
     cout<<"Enter 0 to add \nEnter 1 to subtract \nEnter 2 to multiply\nEnter 3 to divide"; 
     int choice; 
     cin>> choice; 
     return choice; 
     } 


    }; 

float _tmain(float argc, _TCHAR* argv[]) 
{ 
float num1, num2; 
cout<<"Enter two numbers"; 
     cin>> num1>> num2; 

MathPrg mathP(num1, num2); 
cin>>num1; 
    return 0; 
} 

오류 : ------는 빌드 시작 : 프로젝트 : 구성 FunctionArray : 디버그는 Win32 ------ FunctionArray.cpp을 C : 문서 및 설정 \ \ 차야 내 문서 \ \ Visual Studio 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp (22) : 오류 C4867 : 'MathPrg :: add': 함수 호출 누락 된 인수 목록; '& MathPrg :: add'를 사용하여 c : \ documents and settings \ chaya \ my documents \ visual 스튜디오 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp (22)에 대한 포인터를 만듭니다. 오류 C4867 : 'MathPrg : : subtract ': 함수 호출 누락 된 인수 목록; '& MathPrg :: subtract'를 사용하여 c : \ documents and settings \ chaya \ my documents \ visual 스튜디오 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp (22)에 대한 포인터를 만듭니다. 오류 C4867 : 'MathPrg : : 곱하기 ': 함수 호출 누락 된 인수 목록; '& MathPrg :: multiply'를 사용하여 c : \ documents and settings \ chaya \ my documents \ visual 스튜디오 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp (22)에 대한 포인터를 만듭니다. 오류 C4867 : 'MathPrg : : 나누기 ': 함수 호출 누락 된 인수 목록; '& MathPrg :: divide'를 사용하여 c : \ documents and settings \ chaya \ my documents \ visual 스튜디오 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp (23)에 대한 포인터를 만듭니다. 오류 C2171 : '*' : 'float (__thiscall MathPrg :: *) (float, float)'형식의 피연산자에 대해 올바르지 않습니다. c : \ documents 및 settings \ chaya \ my documents \ visual 스튜디오 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp (23) : 오류 C2064 : 인수가 2 개의 인수를 취하는 함수로 평가되지 않습니다. = 0 빌드 성공 : 0 성공, 1 실패, 0 최신, 0 건너 뛰기 ======== ==

+0

그리고 당신이 얻고있는 무슨 오류 -

당신은 클래스의 방법 (&MathPrg::add)의 주소를 할당 한 다음 지정된 개체/인스턴스를 호출해야? – Kevin

+0

시도해 보셨습니까 ((* f) (float, float)) []? –

+0

님이 질문에 추가되었습니다 – user2430018

답변

2
void getAnswer(int choice,float num1, float num2){ 
    typedef float (MathPrg::*f) (float, float); 
    f set[] = {&MathPrg::add, &MathPrg::subtract, &MathPrg::multiply, &MathPrg::divide}; 
    float answer = (this->*set[choice])(num1, num2); 
    cout << answer; 
} 

은 저에게 잘 맞습니다. , (this->*set[choice])(num1, num2)

+0

감사! 그것은 작동합니다! – user2430018