2011-08-16 34 views
1

私は方程式系の解を得る必要があります。この目的のために、関数sgesv_()を使用します。互換性のないポインタ型?? Strange

すべてがうまくいき、解決策の正しい結果が得られます。

しかし、私は奇妙な警告を取得します。

警告:AppleはWWDCのビデオにそれを使用するように私は、関数を使用しています

互換性のないポインタ型

から「sgesv_」の引数3を渡します。

私は間違っていますか?

A1は、A2、B1、B2、C1、C2は、第三のパラメータはfloat *であることを意味するフロート

 __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

ですが、あなたはフロートの2次元配列を渡しています。これらの浮動小数点数は正しい順序で行われます。

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

優れた答え。 –

関連する問題