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

Problem z tworzeniem wielu obiektów klasy z dynamiczna tablica

Ostatnio zmodyfikowano 2018-05-15 21:11
Autor Wiadomość
Draexis
Temat założony przez niniejszego użytkownika
Problem z tworzeniem wielu obiektów klasy z dynamiczna tablica
» 2018-05-11 22:23:06
Witam :) Jestem początkującym programistą. Stworzyłem klasę Cont, która zawiera dwuwymiarową tablicę dynamiczną. Problem pojawia się kiedy chcę stworzyć tablicę tych obiektów za pomocą pętli for.
Klasa wygląda tak:

C/C++
/// Klasa Cont
class Cont {
public:
    int rows;
    int columns;
    int ** space;
    static int l;
    const int id;
    std::time_t t;
    Cont();
    Cont( int X, int Z, std::time_t Y );
    ~Cont();
};

Cont::Cont()
    : id( l )
{
    l++;
    int * space = NULL;
}



Cont::Cont( int X, int Z, std::time_t Y )
    : id( l )
{
    t = Y;
    l++;
    rows = X;
    columns = Z;
    space = new int *[ X ];
    for( int i = 0; i < X; i++ )
         space[ i ] = new int[ Z ];
   
   
   
   
}

Cont::~Cont() {
    for( int i = 0; i < rows; i++ )
         delete[] space[ i ];
   
    delete[] space;
}

int Cont::l = 1;



Program wysypuje się jeśli np. wpiszę
Cont Kont[ 5 ];
 Podpowie ktoś co jest nie tak? Z góry dziękuję. :)
P-171014
pekfos
» 2018-05-11 22:48:32
Co to ma być?
C/C++
Cont::Cont()
    : id( l )
{
    l++;
    int * space = NULL; // ??????????
}
P-171015
Draexis
Temat założony przez niniejszego użytkownika
» 2018-05-11 23:18:38
Konstruktor domyślny przypisujący zmiennej  id wartość zmiennej l oraz zwiększający wartość zmiennej l o 1 oraz ustawiający wskaźnik na NULL. Tutaj tkwi problem?  Możesz wytłumaczyć bo nie rozumiem?
P-171016
pekfos
» 2018-05-11 23:41:42
Opisałeś cały fragment, chociaż miałeś oznaczoną jedną linię. Może nie zauważyłeś komentarza, tak samo jak nie zauważyłeś, że w oznaczonej linii użyłeś zupełnie innej składni, niż wszędzie indziej, gdzie "ustawiasz wartość"?
P-171017
YooSy
» 2018-05-12 00:01:48
Tworzysz lokalny wskaźnik, który jest niszczony po wyjściu ze scopa,
natomiast pole klasy, które (wydaje ci się ustawiasz) jest nietknięte.

P-171018
Draexis
Temat założony przez niniejszego użytkownika
» 2018-05-12 00:09:14
Zauważyłem komentarz ale opisałem wszystko bo nie wiedziałem co w tym może być nie tak. Teraz natomiast dopiero zauważyłem gdzie był błąd.
Po poprawieniu wygląda to tak ale program dalej się sypie:
C/C++
Cont::Cont()
    : id( l )
{
    l++;
    space = NULL;
}

Dziękuję za poprawkę ale problem nadal występuje. Co jeszcze może być nie tak?
Docelowo chciałbym żeby dało się napisać coś takiego :
C/C++
Cont Kont[ z ];
for( int i = 0; i < z; i++ )
{
    Kont[ i ] = Cont( wymiary[ i ][ 0 ], wymiary[ i ][ 1 ], t[ i ] )
   
}

Potrzebuję to tak napisać, ponieważ wymiary kontenerów oraz timestamp wyciągam z pliku tekstowego do zmiennych a tych kontenerów ma być około 1000 więc tworzenie każdego obiektu osobno jest bez sensu. Dzięki z góry za pomoc :)
P-171019
pekfos
» 2018-05-12 00:42:40
Użyj std::vector<>, nie tablicy i/lub zaimplementuj poprawne kopiowanie/przenoszenie obiektów klasy. Samo utworzenie tablicy się sypie, bo konstruktor domyślny nie inicjalizuje wszystkich używanych zmiennych.
P-171020
Draexis
Temat założony przez niniejszego użytkownika
» 2018-05-12 13:42:54
Chodzi o coś takiego?
C/C++
/// Klasa Cont
class Cont {
public:
    int rows;
    int columns;
    int ** space;
   
   
    std::time_t t;
   
    Cont( int X, int Z, std::time_t Y );
    ~Cont();
};





Cont::Cont( int X, int Z, std::time_t Y )
{
    t = Y;
   
    rows = X;
    columns = Z;
    space = new int *[ X ];
    for( int i = 0; i < X; i++ )
         space[ i ] = new int[ Z ];
   
   
   
   
}

Cont::~Cont() {
    for( int i = 0; i < rows; i++ )
         delete[] space[ i ];
   
    delete[] space;
}

Usunąłem z klasy konstruktor domyślny a także zmienną l oraz id.

C/C++
vector < Cont > Kont;
for( int i = 0; i < n; i++ ) //n-liczba kontenerow
{
    Kont.push_back( Cont( wymiary[ i ][ 0 ], wymiary[ i ][ 1 ], t[ i ] ) );
   
}

Powyżej jak próbowałem użyć vector ale niestety program dalej się sypie. Nie o to chodziło czy coś jest nie tak?
P-171021
« 1 » 2
  Strona 1 z 2 Następna strona