mehrdimensionale Arrays als Parameter?



  • Hi!

    Hab inzwischen bissl rumgesucht und fast den Eindruck, als ob folgender Code in C++ gar nicht möglich ist:

    #include<iostream>
    using namespace std;
    
    int funktion(int);
    
    int main()
    {
      int array[20][20] = {0};
      int x = y = 5;
    
      funktion(array[x][y]);
    
      return 0;
    }
    
    int funtion(int test[a][b])
    {
      int n = 0;
    
    // links und rechts vom Feld
      if (test[a][b-1]) n = n++;
      if (test[a][b+1]) n = n++;
    
    // Reihen über und unter dem Feld
      for (i=-1; i<2; i++)
      {
    	if (test[a-1][b+i]) n = n++;
    	if (test[a+1][b+i]) n = n++;
      }
    
      return n;
    }
    

    Was die Funktion macht is jetzt gar nicht mal so wichtig. Was mich nur wundert ist, dass die Parameterübergabe ("funktion(array[x][y])") nicht funktioniert. Hab ich da noch einen Syntaxfehler drin? Ich bekomm beim compilieren immer Fehlermeldungen im Stil von:

    prog10.cpp(99) : error C2065: 'a' : nichtdeklarierter Bezeichner
    prog10.cpp(99) : error C2057: Konstanter Ausdruck erwartet
    prog10.cpp(99) : error C2466: Reservierung eines Feldes der konstanten Groesse 0 nicht moeglich
    prog10.cpp(99) : error C2065: 'b' : nichtdeklarierter Bezeichner
    prog10.cpp(99) : error C2057: Konstanter Ausdruck erwartet
    prog10.cpp(99) : error C2466: Reservierung eines Feldes der konstanten Groesse 0 nicht moeglich
    prog10.cpp(99) : error C2087: '<unbekannt>' : Feldindex fehlt

    Aber das Feld hat ja gar nicht die "konstante Größe 0", da ja beim Funktionsaufruf die zwei Integerwerte übergeben werden. Muss ich bei der Funktionsdeklaration etwa explizit die Feldgröße angeben?? Is mir grad beim schreiben gekommen, hab ich noch nicht ausprobiert. Was mach ich falsch?



  • die Grösse eines Arrays muss konstant sein.

    z.B, ist das nicht möglich:

    int a = 10;
    int b[a];   // Fehler, da a nicht konstant !!
    

    möglich wäre aber:

    int b[10];
    

    oder:

    const int a=10;
    int b[a];
    


  • mir scheint, du weißt nicht ganz, was du willst: willst du einen einzelnen integer übergeben oder ein ganzes array?
    die deklaration von funktion sowie ihr aufruf in main lässt darauf schließen, dass du nur einen einzelnen int übergeben willst, also müsste deine funktionsdefinition ungefähr so lauten:

    int funktion(int test)
    {
    //tue was mit test
    }
    

    andererseits brauchst du in funktion zugriff auf das gesamte array, was nicht zur ersten funktiondeklaration zusammenpasst (und zum aufruf in main).

    was du in dem fall tun könntest wäre unter anderem folgendes

    template <int a, int b>
    void funktion (int (&array)[a][b])
    {
      //tue was mit dem array
    }
    
    int main ()
    {
      int foo[20][20];
      funktion(foo);
    }
    

    was genau du mit deinem array tun möchtest und auf welche art du es brauchst (soll es doch dynamisch sein? soll funktion kein template sein? soll das originalarray unangetastet bleiben?) kann ich dir allerdings nicht sagen 😉


Anmelden zum Antworten