2011-08-16 64 views
1

我需要得到方程系統的解。爲此我使用函數sgesv_()。指針類型不兼容?奇怪的

一切都很好,它給我的解決方案的正確結果。

但我得到一個奇怪的警告。

警告:傳遞「sgesv_」的說法,從3兼容的指針類型

我使用的功能蘋果使用它的視頻WWDC。

我在做什麼錯?

A1,A2,B1,B2,C1,C2爲彩車

 __CLPK_integer info; 
     __CLPK_integer n=2; 
     __CLPK_integer nb=1; 
     __CLPK_integer ipiv[n]; 
     float A[n][n]; 
     A[0][0]=a1; 
     A[0][1]=a2; 
     A[1][0]=b1; 
     A[1][1]=b2; 
     float B[n]; 
     B[0]=-c1; 
     B[1]=-c2; 
     sgesv_(&n, &nb, A, &n, ipiv, B, &n, &info); 
+0

sgesv_()是你寫的東西嗎?你可以發佈代碼嗎? –

+0

+1有充分的動機瞭解警告並修復它們! –

回答

4

第三個參數是意味着是一個float *,但你通過浮動的二維數組。恰巧,這些花車的順序是正確的。爲了擺脫的警告,你可以這樣做:

sgesv_(&n, &nb, &A[0][0], &n, ipiv, B, &n, &info); 

或本:

sgesv_(&n, &nb, A[0], &n, ipiv, B, &n, &info); 

,甚至這樣的:

sgesv_(&n, &nb, (float *)A, &n, ipiv, B, &n, &info); 

或者您也可以 「扁平化」 的一個陣列,例如

float A[n * n]; 
    A[0 * n + 0] = a1; 
    A[0 * n + 1] = a2; 
    A[1 * n + 0] = b1; 
    A[1 * n + 1] = b2; 
    // ... 
    sgesv_(&n, &nb, A, &n, ipiv, B, &n, &info); 
+0

警告消失。很多謝謝保羅! – saimonx

+1

優秀的答案。 –