2013-06-19 91 views
0

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: error: conflicting types for ‘convolve’ 

幫助,請...

+0

什麼是'input','kernel'和'sizeIm'?請在這裏包括聲明。 – ruben2020

+2

看看錯誤消息:它從'program.c:55:8'開始。這告訴你(如果我解釋正確):(a)問題出現在'program.c'文件中,(b)問題出現在55上,(c)問題出現在該行的第8個字符處。錯誤消息實際上有助於發現問題 - 不要只是將它們視爲編譯器的嗚嗚聲。 – AJMansfield

+0

@AjMansfield:這沒有幫助。 OP已經確定了導致錯誤的線路。他們瞭解問題的位置。問題是關於原因。 –

回答

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的數組的指針。

+2

在您的原型中添加參數名稱沒有任何壞處。對於正在使用頭文件的其他人來說,這是一件非常好的事情,這樣他們可以更好地瞭解你的意圖。 – plinth

+0

參數是矩陣指針,我在main中聲明它們。那麼,我想我可以在原型之前定義它們......謝謝! – nineties

+0

@ htann1900實際類型並不重要,重要的是它們匹配。如果你在原型中聲明一個參數爲「int **」,那麼當你實現函數時,它需要是一個'int **'。 –

1

您的原型爲其第一個和第二個參數指定了一個整數數組的指針,而在您的函數中,您只是指定了整數指針。

您需要糾正原型或函數定義。

+0

是的,當然!這是一個錯誤的錯誤:\。感謝您的支持! – Sagar