Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z tablicami w argumentach

Ostatnio zmodyfikowano 2009-12-10 22:19
Autor Wiadomość
eBbi
Temat założony przez niniejszego użytkownika
Problem z tablicami w argumentach
» 2009-12-10 18:44:15
Witam
   Mam taki mały problem z funkcją a dokładniej z jednym z trzech argumentów. Tym argumentem jest tablica dwu wymiarowa:

Definicja

void zapis(int,int,int);

Kod Funkcji

void zapis(int figura, int poziom, int pion)
{
     for(int i=0;i < 50;i++)
     {
     517 ->  if(!figura[i][0])
             {
     519 ->       figura[i][0]=1;
     520 ->       figura[i][1]=poziom;
     521 ->       figura[i][2]=pion;
     522 ->       figura[i][3]=poziom-mouse_x;
                  break;
             }   
     }
}

Wywołania Funkcji

                    else if(mouse_b == 0 && kurs > 3)
                    {
                        if(kurs==4)
                        zapis(troj[50][5],poziom,pion);
                        else if(kurs==5)
                        zapis(kolk[50][5],poziom,pion);                       
                        else if(kurs==6)
                        zapis(pros[50][5],poziom,pion);                    
                        kat(kurs);
                    }

Błędy

         -In function `void zapis(int, int, int)':
         -517 `int[int]' for array subscript
         -519 `int[int]' for array subscript
         -520 `int[int]' for array subscript
         -521 `int[int]' for array subscript
         -522 `int[int]' for array subscript

 Szukałem na google i znalazłem wiele tematów z tą treścią ale żaden nie rozwiązuje mojego problemu. PZD eBbi
P-12037
DejaVu
» 2009-12-10 18:59:24
Przekazywanie tablic dwuwymiarowych do funkcji to zuo. Powody:
1) Musisz podać wskaźnik na dane
2) Musisz podać rozmiar pierwszego wymiaru
2) Musisz podać rozmiar drugiego wymiaru
W konsekwencji musiałoby to wyglądać tak:
C/C++
//źle: void funkcja(int** tab,int size1,int size2)
void funkcja( int tab[][ 10 ], int size1, int size2 )
{
    for( int i = 0; i < size1; i++ )
    for( int j = 0; j < size2; j++ )
    {
        std::cout << tab[ i ][ j ] << " ";
    } //for for
   
}
//...
int tablica[ 20 ][ 10 ];
funkcja( tablica, 20, 10 );
P-12040
Elaine
» 2009-12-10 19:58:40
To się nie skompiluje - tablica jest niejawnie konwertowalna do wskaźnika, czyli z int[11] może się zrobić int*. Z int[11][8] może się zrobić w najlepszym wypadku int (*)[8], ale już nie int** - mamy tablicę ośmioelementowych tablic int, nie tablicę wskaźników, a dla typu wskazywanego żadne konwersje już nie zajdą. Jakby zachodziły, to możnaby przypisać int* do float*, a tego chyba nie chcemy, nie?
P-12045
DejaVu
» 2009-12-10 22:19:26
Poprawiłem... nie chciało mi się sprawdzać czy się kompiluje i taki kwiatek wyszedł przez brak myślenia.
P-12053
« 1 »
  Strona 1 z 1