2013-05-31 126 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:\ Documents和Settings \茶屋\我的文檔\ Visual Studio 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp(22):error C4867:'MathPrg :: add':函數調用缺少參數列表;使用'& MathPrg :: add'創建指向成員的指針 c:\ documents and settings \ chaya \ my documents \ visual studio 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp(22):error C4867:'MathPrg: :減法':函數調用缺少參數列表;使用'& MathPrg :: subtract'創建一個指向成員的指針 c:\ documents and settings \ chaya \ my documents \ visual studio 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp(22):error C4867:'MathPrg: :multiply':函數調用缺少參數列表;使用'& MathPrg :: multiply'創建一個指向成員的指針 c:\ documents and settings \ chaya \ my documents \ visual studio 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp(22):error C4867:'MathPrg: :divide':函數調用缺少參數列表;使用'& MathPrg :: divide'創建一個指向成員的指針 c:\ documents and settings \ chaya \ my documents \ visual studio 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp(23):error C2171:'*' :對於'float(__thiscall MathPrg :: *)(float,float)'操作數非法' c:\ documents and settings \ chaya \ my documents \ visual studio 2010 \ projects \ functionarray \ functionarray \ functionarray.cpp(23) :錯誤C2064:術語不計算爲帶有2個參數的函數 ==========構建:0成功,1失敗,0最新,0跳過======== ==

+0

而你得到什麼錯誤? – 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; 
} 

適合我。

您必須分配類的方法(&MathPrg::add)的地址,然後調用它指定的對象/實例 - (this->*set[choice])(num1, num2)

+0

謝謝!有用! – user2430018