Несовместимый тип указателяСтранный - PullRequest
1 голос
/ 16 августа 2011

Мне нужно получить решение системы уравнений. Для этого я использую функцию sgesv _ ().

Все прекрасно работает, и это возвращает мне правильные результаты решения.

Но я получаю странное предупреждение.

предупреждение: передача аргумента 3 'sgesv_' из несовместимого типа указателя

Я использую эту функцию, как Apple, использует ее в видео 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);

1 Ответ

4 голосов
/ 16 августа 2011

Третий параметр должен быть float *, но вы передаете 2D-массив с плавающей точкой. Так уж вышло, что эти поплавки находятся в правильном порядке. Чтобы избавиться от предупреждения, вы можете сделать это:

    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);

Или вы могли бы просто "сгладить" ваш массив A, например

    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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...