2011-08-16 135 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

优秀的答案。 –