0

C初心者です。私のプログラムのエラーを理解しようとしています。

関数プロトタイプ:

float* convolve(int (*)[10], int (*)[3], int *, int);

実際の機能:

float* convolve(int* ImdataPtr, int* KernelPtr, int* size, int sizeKernel)

メインでの呼び出し方法:

float* output;
output = convolve(input,kernel,sizeIm,3);

コンパイル エラー:

program.c:55:8: error: conflicting types for ‘convolve’

助けてください...

4

2 に答える 2

6

問題は、プロトタイプが一致しないことです。int(*)[10]と はとint(*)[3]は異なるタイプであるため、タイプがまったく同じであることを確認してくださいint*

float* convolve(int(*)[10], int(*)[3], int*, int);

float* convolve(int (*ImdataPtr)[10], int (*KernelPtr)[3], int* size, int sizeKernel) {
    // etc
}

引数名を含めて、それらをまったく同じにすることもできます(おそらくそうするべきです):

float* convolve(int (*ImdataPtr)[10], int (*KernelPtr)[3], int* size, int sizeKernel);

float* convolve(int (*ImdataPtr)[10], int (*KernelPtr)[3], int* size, int sizeKernel) {
    // etc
}

これらを宣言する方法を調べなければならなかったので、配列/ポインターの配列への C ポインターに関する質問も役立つかもしれません。int*[3]へのポインタの配列ですがint(逆方向に読むだけです)、int(*)[3]の配列へのポインタですint

于 2013-06-19T19:27:25.547 に答える
1

プロトタイプでは、1 番目と 2 番目の引数に integer の配列へのポインターを指定していますが、関数では整数ポインターのみを指定しています。

プロトタイプまたは関数定義を修正する必要があります。

于 2013-06-19T19:28:38.020 に答える