2

テンプレート関数へのポインターを使用しています。関数には配列参照引数があります。次に例を示します。

template< size_t N >
double MyFunction( double (&x)[N] );

以前の関数型を別の関数の引数のように使用します

template< size_t N >
bouble BigFunction( double (* PtrFunc)( double (&)[N] ), ... ) {
    double x[3];
    ...
    // fill x
    // call PtrFunc
    double y = (* PtrFunc)( x ); // error: ...
    ...
}

メインプログラムで呼び出しますdouble z = BigFunction( &MyFunction, ... )が、GCC 4.7.2 でコンパイルしようとすると、N = 3 の配列の特定のケースで次のエラーが発生します (ケースは重要ではなく、エラーの [3] のみを説明します)

エラー:型 'double [(((sizetype)(((ssizetype)dim[1]) + -1))+ 1)]' の式からの型 'double (&)[3]' の参照の初期化が無効です。 /p>

配列参照を使用して問題を解決するにはどうすればよいですか?

注.-ポインター引数を typedef または std::function< double( double (&)[N] ) > の構造体に置き換えた場合、問題は同じです。

ここにideoneの完全な例があります

4

1 に答える 1

0

http://ideone.com/oWef7Lの例では、 24 行目を

double x[M];

double x[N];

これはエラーなしでコンパイルされます: http://ideone.com/VouWlG

于 2013-06-25T14:36:11.073 に答える