4

typedef を使用せずに関数へのポインターを返そうとしていますが、そのような設定ができないかのように、コンパイラー (gcc) が奇妙なエラーを出しています。

備考: typedef コードを使用すると機能します。

コード:

void catch_and_return(void (*pf)(char*, char*, int&), char *name_one, char* name_two, int& number)(char*, char *, int&)
{
    pf(name_one, name_two, number);

    return pf;
}

エラー:

関数を返す関数として宣言された 'catch_and_return'

コンパイラがこれを許可しない理由を説明してもらえますか? ありがとうございました!

4

1 に答える 1

7

関数を次のように宣言します。

void (*catch_and_return(void (*pf)(char*, char*, int&), char *name_one, char* name_two, int& number))(char*, char *, int&)
{
    pf(name_one, name_two, number);

    return pf;
}

関数を返す関数の構文は次のとおりです。

戻り関数の戻り値の型(*関数名(パラメーター リスト) ) (関数から戻りパラメーター リスト)

注:この宣言は一目で理解するのが面倒な場合typedefがあります。可能な限り使用してください。

于 2013-07-28T19:55:22.053 に答える