函数指针数组错误

C++ Array of function pointers errors

本文关键字:错误 数组 指针 函数      更新时间:2023-10-16

我是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 multiplynEnter 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.cppc:documents and settingschayamy documentsvisual studio 2010projectsfunctionarrayfunctionarrayfunctionarray.cpp(22):错误C4867: 'MathPrg::add':函数调用缺少参数列表;使用'&MathPrg::add'创建一个指向成员的指针c:documents and settingschayamy documentsvisual studio 2010projectsfunctionarrayfunctionarrayfunctionarray.cpp(22):错误C4867: 'MathPrg::subtract':函数调用缺少参数列表;使用'&MathPrg::subtract'创建一个指向成员的指针c:documents and settingschayamy documentsvisual studio 2010projectsfunctionarrayfunctionarrayfunctionarray.cpp(22):错误C4867: 'MathPrg::multiply':函数调用缺少参数列表;使用'&MathPrg::multiply'创建一个指向成员的指针c:documents and settingschayamy documentsvisual studio 2010projectsfunctionarrayfunctionarrayfunctionarray.cpp(22):错误C4867: 'MathPrg::divide':函数调用缺少参数列表;使用'&MathPrg::divide'创建一个指向成员的指针c:documents and settingschayamy documentsvisual studio 2010projectsfunctionarrayfunctionarrayfunctionarray.cpp(23):错误C2171: '*':非法操作数类型'float (__thiscall MathPrg::*)(float,float)'c:documents and settingschayamy documentsvisual studio 2010projectsfunctionarrayfunctionarrayfunctionarray.cpp(23):错误C2064: term不计算为带2个参数的函数========== 构建:0成功,1失败,最新的,0跳过 ==========

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 )