invalid conversion from `long int' to `long int (*)[2]'



  • Hallo Ihr,

    also ich habe folgenden header geschrieben, namens ai.h:

    #include<iostream>
    using namespace std;
    extern const int N;
    void mat_mat_prod(long A [N][N], long B [N][N], long C [N][N])
    { int i,j,k;
        for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
                C[i][j] = 0;
                for(int k=0;k<N;k++)
                    C[i][j] +=A[i][k]*B[k][j];
    
    }
    

    Und folgende CPP-File:

    #include<iostream>
    extern const int N=2;
    #include "ai.h"
    using namespace std;
    int main()
    {  
       long A[N][N] ={{12},{45}};
       long B[N][N] ={{12},{45}};
       long C[N][N];
       mat_mat_prod(A[N][N],B[N][N],C[N][N]);
       system("Pause");
      return 0;    
    
    }
    

    Nun kommt folgende Fehlermeldung:

    10 C:\cygwin\home\User\ProgII\uebung02_2505251\Aufgabe1.cpp invalid conversion from `long int' to `long int (*)[2]'

    Weiß jemand zufällig an was das hängen könnte bzw. was ich falsch gemacht habe?

    MfG XanderCage 😃



  • XanderCage schrieb:

    mat_mat_prod(A[N][N],B[N][N],C[N][N]);
    

    Das hat nicht nur undefiniertes Verhalten, sondern damit übergibst du 3 longs. Der Aufruf muss deshalb wie folgt aussehen

    mat_mat_prod(A,B,C);
    

    nochwas:
    Definiere keine Funktionen in Header Dateien, sofern sie nicht inline oder Templates sind.
    Lass das extern bei der Definition von N weg, also

    // .cpp
    const int N=2;
    

    Ansonsten kannst du Konstanten auch direkt in der Header Datei definieren.



  • Und lass den Teil weg:

    int i,j,k;
    

    Du deklarierst die Variablen nämlich (lokal) in den for schleifen, damit ist die erste deklaration unnötig.


Anmelden zum Antworten