访问C 类中功能指针数组的输入

Accessing entry of Array of function pointers, within a class C++

本文关键字:数组 输入 指针 功能 访问      更新时间:2023-10-16

我写了一个简单的类,该类使用接收索引的方法执行基本的算术操作,并进行两个值来计算。

索引指示在包含功能指针的表中执行的操作。

这是我的代码:

#include <iostream>
using namespace std;
class TArith
{
public:
    static const int  DIV_FACTOR = 1000;
    typedef int (TArith::*TArithActionFunc)(int,int);
    struct TAction
    {
        enum Values
        {
            Add,
            Sub,
            count,
        };
    };
    int action(TAction::Values a_actionIdx, int a_A, int  a_B)
    {
        return ( this->*m_actionFcns[a_actionIdx] )(a_A,a_B);
    }
private:
    int add(int a_A, int a_B)
    {
        return a_A + a_B ; 
    }
    int sub(int a_A, int a_B)
    {
        return a_A - a_B ; 
    }
    static TArithActionFunc m_actionFcns[TAction::count];
    int m_a;
    int m_b;
};
TArith:: TArithActionFunc  TArith:: m_actionFcns[TAction::count] = {
    TArith::add,
    TArith::sub
};
void main(void)
{
    TArith arithObj;
    int a=100;
    int b=50;
    for(int i = 0 ; i <TArith::TAction::count ; ++i)
    {    
        cout<<arithObj.action( (TArith::TAction::Values)i,a,b )<<endl;
    }
    cout<<endl;
}

编译器说:

'TArith::add': function call missing argument list; use '&TArith::add' to create a pointer to member
'TArith::sub': function call missing argument list; use '&TArith::sub' to create a pointer to member

为什么我需要使用&amp;符号?

TArith:: TArithActionFunc  TArith:: m_actionFcns[TAction::count] = {
    TArith::add,
    TArith::sub,
    TArith::mul,
    TArith::div
};

正确指向C类成员函数f指针的语法为&C::f。您缺少领先的&

尝试:

TArith:: TArithActionFunc  TArith:: m_actionFcns[TAction::count] = {
    &TArith::add,
    &TArith::sub,
    &TArith::mul,
    &TArith::div
};