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

Tablica trójwymiarowa, odwołanie do jej wartości

Ostatnio zmodyfikowano 2015-05-17 20:25
Autor Wiadomość
Breon
Temat założony przez niniejszego użytkownika
Tablica trójwymiarowa, odwołanie do jej wartości
» 2015-05-17 14:13:07
Witam. Dopiero zaczynam moją przygodę z programowaniem.
Chcę wykorzystać w programie tablicę trójwymiarową. Zarezerwowałem pamięć, lecz nie potrafię odwołać się do jej wszystkich elementów. Działa odwoływanie do początku tej tablicy, do jej pierwszej "warstwy". Proszę o wskazanie mi błędu i pomoc z jego poprawą.

main.cpp
C/C++
using namespace std;

int _tmain( int argc, _TCHAR * argv[] )
{
    int ilosc_graczy = 3;
    int wymiary_tablic_zbiory = 10;
    int wymiary_tablic_elementy = 10;
   
    class Tab tablica;
   
    tablica = tworzenie_tablicy( ilosc_graczy, wymiary_tablic_zbiory, wymiary_tablic_elementy );
   
    cout << tablica.wartosci[ 1 ][ 1 ] << endl; //wyswietla wartosci z poczatku tablicy
    cout << tablica.wartosci[ 1 ][ 2 ][ 9 ] << endl; //generuje blad, jak odwolac sie do tablicy trojwymiarowej?
   
    cout << endl << "Dowolny klawisz zakonczy program";
    _getch();
    return 0;
}
Plik fukncje.h
C/C++
typedef int byte;

class Tab
{ public:
    byte ** wartosci;
    int ilosc_graczy;
    int ilosc_elementow;
    int ilosc_zbiorow;
};

class Tab tworzenie_tablicy( int ilosc_graczy, int ilosc_zbiorow, int ilosc_elementow );
Plik funkcje.cpp
C/C++
using namespace std;

byte ** rezerwacja_pamieci( int ilosc_graczy, int ilosc_zbiorow, int ilosc_elementow )
{
    int *** tab;
    tab = new int **[ ilosc_graczy ];
    for( int m = 0; m < ilosc_graczy; m++ )
    {
        tab[ m ] = new int *[ ilosc_zbiorow ];
        for( int i = 0; i < ilosc_zbiorow; i++ )
        {
            tab[ m ][ i ] = new int[ ilosc_elementow ];
            for( int j = 0; j < ilosc_elementow; j++ )
            {
                tab[ m ][ i ][ j ] = m * 10 + i;
                cout << " " << tab[ m ][ i ][ j ];
            }
            cout << endl;
        }
        cout << endl;
    }
    return * tab;
}
struct Tab tworzenie_tablicy( int ilosc_graczy, int ilosc_zbiorow, int ilosc_elementow )
{
    class Tab tablica_nowa;
    tablica_nowa.ilosc_graczy = ilosc_graczy;
    tablica_nowa.ilosc_elementow = ilosc_elementow;
    tablica_nowa.ilosc_zbiorow = ilosc_zbiorow;
    tablica_nowa.wartosci = rezerwacja_pamieci( ilosc_graczy, ilosc_zbiorow, ilosc_elementow );
    return tablica_nowa;
}
P-132397
pekfos
» 2015-05-17 20:25:53
Żeby się odwołać do tablicy trójwymiarowej, najpierw wypadało by ją mieć. Masz ją tylko w rezerwacja_pamieci(), ale zwracasz już dwuwymiarową. Najwyraźniej to by było za proste, gdyby we wskaźnikach na tę tablicę mieć wszędzie 3 gwiazdki, a z funkcji zwracać po prostu tab..
P-132421
« 1 »
  Strona 1 z 1