3

関数を別の関数のパラメーターとして渡すのに問題があります...

エラー: エラー 1 エラー C2664: 'wrapper': パラメーター 1 を 'int' から 'int (__cdecl *)(int)' に変換できません

int inc( int n )
{
    return n + 1 ;
}

int dec( int n )
{
    return n - 1 ;
}

int wrapper(   int i, int func(int)   )
{
    return func( i ) ;
}   


int main(){

    int a = 0 ;

    a = wrapper(  3, inc( 3 )  ) ;

    return 0 ;

}
4

5 に答える 5

5

inc(3)関数呼び出しの結果をに渡していますが、wrapper期待どおりの関数ポインタではありません。

a = wrapper(3, &inc) ;

于 2011-06-13T14:54:16.810 に答える
1

あなたの呼び出しは整数、呼び出しからの戻り値inc(3)、つまり4を渡しています。

それは関数ポインタではありません。

おそらくあなたは次のことを意味しました:

a = wrapper(3, inc);

intこれは機能し、パラメータで呼び出す値に a を割り当てます3

于 2011-06-13T14:54:11.053 に答える
1

現在のように、 は と をwrapper取り、 1を受け取って を返すint関数へのポインタを受け取ります。関数にa ポインターを渡す代わりに、関数を呼び出して戻り値 ( an )を渡しているため、int と int を渡そうとしています。コードを期待どおりに動作させるには (私が思うに)、呼び出しを次のように変更します。intintintwrapper

a = wrapper(3, &inc);
于 2011-06-13T14:55:28.193 に答える
1

この線:

 a = wrapper(  3, inc( 3 )  ) ;

効果的に:

a = wrapper(3, 4);

私はあなたが意味すると思います:

a = wrapper(3, inc);

これは、2 番目の引数として inc() 関数へのポインターを wrapper() に渡します。

于 2011-06-13T14:55:30.513 に答える
1

私のプログラムでこのエラーが発生しました:

error C2664: 'glutSpecialFunc' : cannot convert parameter 1 from 'void (__cdecl *)(void)' to 'void (__cdecl *)(int,int,int)'

メインメソッドよりも後にメソッド定義を書いていたからです。メインメソッドを切り取り、関数の定義より後に貼り付けると、エラーがなくなりました。

于 2012-05-29T15:19:20.890 に答える