C++ 函数指针数组错误

标签 c++ function pointers

我是 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,配置:Debug Win32 ------ 函数数组.cpp c:\documents and settings\chaya\my documents\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::subtract': 函数调用缺少参数列表;使用 '&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): error C2064: term 不计算为带 2 个参数的函数 ========== 构建:0 成功,1 失败,0 最新,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 ),

关于C++ 函数指针数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16863518/

相关文章:

c++ - 如何在不调整大小的情况下从 std::vector 中删除元素

c++ - 运算符必须取 'void'

ios - View 对象/状态行为的属性

C#编译器提示函数本身不明确

c - 通过引用传递时,结构内的指针不会改变 C

c++ - 为什么有两个不同的输出?

c++ - C++ 中的 4d 映射?

c++ - 程序编译但未运行c++

oracle - ORA-01830 : date format picture ends before converting entire input string in TOAD

swift - 无法将可选作为可选返回