C函数原型,编译错误

C函数原型,编译错误,c,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: e

我是新手。试图找出我程序中的错误

功能原型:

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’

请帮忙…

问题是原型不匹配。确保类型完全相同,因为
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
}

我必须查看如何声明这些,因此您可能会发现有关的问题也很有用
int*[3]
是指向
int
(just)的指针数组,但
int(*)[3]
是指向
int

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


您需要更正原型或函数定义。

什么是
输入
内核
sizeIm
?请在此处包含声明。请查看错误消息:它从程序启动。c:55:8
。这告诉你(如果我解释正确的话),(a)问题在
program.c
文件中,(b)问题在第55行,以及(c)问题在该行的第8个字符处。错误消息实际上有助于发现问题——不要仅仅因为编译器抱怨而忽略它们。@AjMansfield:这没有帮助。OP已经识别出导致错误的线路。他们了解问题的位置。问题在于原因。在原型中添加参数名称并无害处。这对于其他正在使用您的头文件的人来说是一件非常好的事情,这样他们可以更好地了解您的意图。参数是矩阵指针,我在main中声明它们。嗯,我想我可以在原型之前定义它们。。。谢谢@HT1900实际类型并不重要,重要的是它们匹配。如果在原型中将参数声明为
int**
,则在实现该函数时,该参数必须是
int**
。@BrendanLong:原型没有
int**
类型的参数。它的参数类型为
int(*)[10]
int(*)[3]
,它们是不同的。前者是指针对指针。后者是指向数组的指针。在我更改代码后,问题仍然存在。我主要声明:三个数组,并将它们的名称作为convolve传递(ar1、ar2、ar3、sizeKernel)。我得到的信息是,'注意:应该是'int',但参数的类型是'int()[3]'是的,当然!这是一个严重的错误:\。谢谢你抓住它!