簡體   English   中英

指向函數c ++的指針數組

[英]array of pointer to functions c++

有人能告訴我這段代碼有什么問題嗎?! visual studio告訴*的操作數必須是一個指針......(在我們稱之為操作的行中)...有人能說出如何准確地聲明一個指向函數的指針數組嗎? 我真的很困惑。

#include<iostream>
#include<conio.h>
using namespace std;


int power(int x)
{
  return(x*x);
}

int factorial(int x)
{
    int fact=1;
    while(x!=0)
    fact*=x--;
    return fact;
}

int multiply(int x)
{
    return(x*2);
}

int log(int x)
{
    int result=1;
    while(x/2)
    result++;
    return result;
}

//The global array of pointer to functions
int(*choice_array[])(int)={power,factorial,multiply,log};

int operation(int x,int(*functocall)(int))
{
    int res;
    res=(*functocall)(x);
    return res;
}

int main()
{
    int choice,number;
    cout<<"Please enter your choice : ";
    cin>>choice;
    cout<<"\nPlease enter your number : ";
    cin>>number;
    cout<<"\nThe result is :"<<operation(number,(*choice_array[choice](number)));
}

問題是(*choice_array[choice](number))不是函數本身,而是函數調用的結果。 你的意思是(*choice_array[choice])

operation接受一個函數作為參數,但是(*choice_array[choice](number))是一個int,因為它將choice-array[choice]應用於number

只做operation(number, choice_array[choice])

編輯:不想說錯,但在我看來

*(choice_array[choice])

(choice_array[choice])

是相同的,(意味着指向函數IS的指針(可以用作調用)函數,你不能“取消引用”它)

這個電話

operation(number, (*choice_array[choice](number)))

是無效的。

您必須提供指向函數的指針作為第二個參數。 要么寫

operation(number, choice_array[choice] )

要么

operation(number, *choice_array[choice] )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM