2014-10-30 33 views
0

我使用矢量操縱和引力常量創建重力模擬器。 我已經定義了2個結構體。重力模擬器,碰撞檢測,矢量

typedef struct { 
    double vector[3]; 
} Vector; 

typedef struct { 
    Vector colour; 
    double mass; 
    double radius; 
    Vector position; 
    Vector velocity; 
    Vector accel; 
} Object; 

我有很多矢量運算功能,包括:

Vector VectorUnit(Vector a) { 

Vector b; 
int i; 

for (i = 0; i < VECTOR_DIM; i++) 
    b.vector[i] = (a.vector[i])/(VectorMag(a)); 

return (b); 
} 

當我運行函數的內部,它編譯罰款。儘管當使用我它聲稱爲「衝突的類型」的錯誤的任何載體量..

GRAV.c:463:8: error: conflicting types for ‘VectorUnit’ 
Vector VectorUnit(Vector a) 
    ^
GRAV.c:341:3: note: previous implicit declaration of ‘VectorUnit’ was here 
    VectorUnit(bodies[j].position); 

是否與一個函數調用諸如VectorUnit具有什麼問題(體顯式調用函數VectorUnit()[j]的.POSITION ); 如上所述,使用我的函數的內部完美編譯..

回答

0

您正在調用函數沒有先聲明它們。自C99以來這是非法的。在C89中,它意味着隱式聲明函數返回int

您需要在函數調用之前爲其提供原型,例如,有一個頭文件:

Vector VectorUnit(Vector a); 

,或者如果該功能只出現在一個.c文件中,有接近文件的頂部聲明:

static Vector VectorUnit(Vector a); 

或將你的函數以不同的順序,以便VectorUnit的身體出現在任何調用它的函數之前。

+0

我宣佈他們除了這一個!謝謝 – 2014-10-30 00:58:44