2013-01-02 68 views
1

我不明白我的錯誤信息函數採用長度爲8的數組作爲參數

triangle_test.c: In function ‘defineLines’: 
triangle_test.c:89:1: error: argument ‘args’ doesn’t match prototype 
triangle_test.c:25:5: error: prototype declaration 

我不知道是否我應該通過& TriHolder,8?我之前從未在C中完成過數組,並且需要一點幫助。

int defineLines(float TriHolder[], int args); 

int main(int argc, char* argv[]) 
{ 
    initialize_TriHolder(1,1,2,2,3,3,4,4); 
    getInputTriVerts(); 
    getInputInteriorPoint(); 
    defineLines(&TriHolder[0],8); //this is the array I want to pass 
} 

defineLines(args, length) 
{ 
    lineAB[0]=TriHolder[0]; //Ax 
    lineAB[1]=TriHolder[1]; //Ay 
    lineAB[2]=TriHolder[2]; //Bx 
    lineAB[3]=TriHolder[3]; //By 
    slopeAB = (lineAB[3]-lineAB[1])/(lineAB[2]/lineAB[0]); 
    interceptAB = slopeAB * -lineAB[0] + lineAB[1]; //b: y - y1 = m(x - x1), x = 0 
    /////////////////////////// 
    lineBC[0]=TriHolder[2];//Bx 
    lineBC[1]=TriHolder[3];//By 
    lineBC[2]=TriHolder[4];//Cx 
    lineBC[3]=TriHolder[5];//Cy 
+2

這是無效的C.用完整的原型定義函數,即返回類型和參數類型。 –

+0

'&TriHolder [0]'和'TriHolder'表示完全相同類型的完全相同的值。確保'TriHolder'的類型是'float'的數組。 – pmg

+0

你的變量名有點混亂'defineLines(float TriHolder [],int args);'''defineLines(args,length)'。第二種情況下的參數是什麼? – andre

回答

3

請勿使用ANSI之前的表單作爲函數參數。以下應編譯:

int defineLines(float TriHolder[], int args); 

int main(void) 
{ 
    /* ... */ 
} 

int defineLines(float triHolder[], int args) 
{ 
    /* .. */ 
} 
3

你的函數頭:

defineLines(args, length){ 

必須符合您的原型:

int defineLines(float TriHolder[], int args); 

注意失蹤關鍵詞(浮動,整型,等等)。所以更像是:

int defineLines(float args[], int length){ 

是你在找什麼。你錯過了TriHolderlineAB的定義,但是從你的代碼中推測它們是一些全局浮點數組。 (請確認)。

此外,您還可以傳遞一個數組:

fineLines(TriHolder,8);} //this is the array I want to pass 

但是,如果我之前的假設是正確的,TriHolder是全球性的,爲什麼還要通過它呢?

+0

哇你2第一張海報很快,好吧,所以我必須改變函數頭來說defineLines(float TriHolder [],int args){//主體函數;返回EXIT_SUCCESS;},謝謝你的幫助 –

1

你的原型defineLines是正確的,但你需要調用它是這樣的:

defineLines(TriHolder,8); 

名字TriHolder對自己其實是一個指向第0數組的索引,它相當於TriHolder[0]

+0

你很快就能幫到我,謝謝敬濤 –