C函数原型,编译错误

时间:2013-06-19 19:23:50

标签: c

C新手在这里。试图找出我的程序中的错误。

功能原型:

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

实际功能:

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

如何在main中调用它:

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

编译错误:

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

请帮助......

2 个答案:

答案 0 :(得分: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 pointer to array/array of pointers disambiguation上的问题也很有用。 int*[3]是指向int(仅read it backwards)的指针数组,但int(*)[3]是指向int数组的指针。

答案 1 :(得分:1)

您的原型为其第一个和第二个参数指定了指向整数数组的指针,而在您的函数中,您只指定了整数指针。

您需要更正原型或功能定义。