Strona 1 z 1

Tablica dynamiczna klas

Nowy postNapisane: niedziela, 22 listopada 2009, 11:48
przez Bert1223
Witam, problem może wydać się banalny, ale brak wiedzy uniemożliwia mi wykonanie założeń.
A co do założeń to, chcę zadeklarować pierwszą klasę dynamicznie:
Kod: Zaznacz cały
myPoint A(12,21);
myPoint * wsk = &A;

Na chwilę obecną *wsk wskazuje na adres klasy A, a dalej wewnątrz klasy umieszczam wskaźnik na następną klasę myPoint:
Kod: Zaznacz cały
class myPoint
{
      private:
            int x, y;
            myPoint   * wsk = :00000000;

      public:
            myPoint() : x (0), y (0) { }
            myPoint(int new_x, int new_y) : x (new_x), y (new_y) { }

            void setX(int set_x) { x = set_x; }
            void setY(int set_y) { y = set_y; }

            int getX() const { return x; }
            int getY() const { return y; }
};

A problem pojawia się na początek gdy chcę wyzerować adres wskazujący na następną klasę. = NULL nie dziła jak i 0 czy :00000000.
Prosiłbym również o napisanie odpowiedniego destruktora dla tej klasy.

Re: Tablica dynamiczna klas

Nowy postNapisane: niedziela, 22 listopada 2009, 11:59
przez Cyfrowy Baron
myPoint * wsk = :00000000;


co to jest:
:00000000;


jak to rozumieć?

Poczytaj sobie ten post o zagnieżdżaniu klas: viewtopic.php?f=2&t=646

Czasami warto spojrzeć na dół forum, są tam wyświetlane podobne posty...

Re: Tablica dynamiczna klas

Nowy postNapisane: niedziela, 22 listopada 2009, 12:22
przez Bert1223
To co zacytowałeś:
Kod: Zaznacz cały
:00000000
to jest Hex adres w pamięci. Jeżeli zostawię samą deklaracje klasę: myPoint * wsk; wewnątrz klasy myPoint to program wykonuję się bez problemu z tym, że wewnątrz myPoint są śmieci a ja chce je wyzerować tak aby wskazywał na koniec kolejki. Rysunek poniżej na pewno więcej wytłumaczy

Re: Tablica dynamiczna klas

Nowy postNapisane: niedziela, 22 listopada 2009, 12:51
przez polymorphism
chcę zadeklarować pierwszą klasę dynamicznie:

Kod: Zaznacz cały
myPoint A(12,21);
myPoint * wsk = &A;


Co jak co, ale ten fragment nie ma nic wspólnego z dynamicznym tworzeniem obiektu A. Po prostu przypisujesz adres lokalnego (jak sądzę) obiektu wskaźnikowi wsk.
to jest Hex adres w pamięci.

Nie, to nie jest poprawna forma. Liczby szesnastkowe zaczynasz od prefiksu 0x, czyli nie :00000000, tylko 0x0. Nie wiem skąd wziąłeś ten dwukropek. Następna sprawa. Nie możesz przypisywać wartości zmiennym przy ich definicji wewnątrz klasy1), od tego jest konstruktor i jego lista inicjalizacyjna.

Rysunek poniżej na pewno więcej wytłumaczy

Heh, po prostu chcesz zrobić listę jednokierunkową 8-)


____
1) wyjątkiem są zmienne const static.

Re: Tablica dynamiczna klas

Nowy postNapisane: niedziela, 22 listopada 2009, 13:03
przez Bert1223
Już tłumaczę co z czego i co z czym.
Co do:
:00000000
zasugerowałem się builder'em bo tak on to przedstawia.
Niestety Twoja propozycja również kuleje:
Kod: Zaznacz cały
myPoint   * wsk = 0x0;
Komunikat:
[BCC32 Error] WSK.h(27): E2233 Cannot initialize a class member here
Full parser context
WSK.cpp(6): #include WSK.h
WSK.h(24): class myPoint

A co do tego
Kod: Zaznacz cały
myPoint A(12,21);
,podpatrzyłem gdzieś na forum, mam dostęp zawsze do pierwszego elementu listy. A taki kod daje bład:
Kod: Zaznacz cały
myPoint   * wsk = A(12,21);
Komunikat:
[BCC32 Error] WSK.cpp(15): E2268 Call to undefined function 'A'
Full parser context
Więc zostawiłem w pierwszej wersji.

Re: Tablica dynamiczna klas

Nowy postNapisane: niedziela, 22 listopada 2009, 13:53
przez polymorphism
Niestety Twoja propozycja również kuleje:

To nie moja propozycja kuleje, tylko twoja wiedza 8-) Gdybyś przeczytał dokładnie i ze zrozumieniem to co napisałem, a napisałem praktycznie to samo co kompilator, czyli:

    E2233 Cannot initialize a class member here
to wiedziałbyś, że taki zapis:
Kod: Zaznacz cały
class myPoint
{
private:
     myPoint   * wsk = 0x0; //<--- chodzi o przypisanie/inicjalizację w tym miejscu
     ...
};

jest niezgodny ze składnią języka, jest to błąd składniowy. Napisałem też, gdzie takie przypisania powinny być.

podpatrzyłem gdzieś na forum, mam dostęp zawsze do pierwszego elementu listy.

Poza samym podpatrzeniem przydałoby się jeszcze zrozumienie. Owszem można tak zrobić, ale nie jest to konieczne i może prowadzić do problemów, szczególnie jeśli nie zna się podstaw języka, co widać chociażby tu:
Kod: Zaznacz cały
myPoint   * wsk = A(12,21);

Ten zapis ma dwa błędy:
  • A jest traktowane jak funkcja (co zresztą kompilator podał w treści błędu), a chyba nie o to chodziło.
  • próbujesz (choć nie udało ci się to) przypisać adres obiektu tymczasowego, który w następnej linii kodu/wyrażeniu już nie istnieje.

Moja rada jest taka, żebyś zajrzał do jakiejś dobrej książki i dowiedział się co to są wskaźniki i jak się nimi posługiwać, jak poprawnie definiuje się klasy i na czym polega dynamiczne tworzenie obiektów. Forum to nie jest dobre miejsce na zdobywanie tego typu wiedzy.

Re: Tablica dynamiczna klas

Nowy postNapisane: niedziela, 22 listopada 2009, 14:30
przez Bert1223
Poradziłem sobie z tym NULL'em.
Moim zdaniem forum jest najlepszym miejscem, żeby dopytać o informację.
A co do tekstów, nie znasz podstaw, przeczytaj książkę, itp to w ogóle mógłbyś sobie darować i nie tracić czasu na pisanie takiej treści.
Mimo wszystko dziękuje za pomoc.

Re: Tablica dynamiczna klas

Nowy postNapisane: niedziela, 22 listopada 2009, 20:28
przez polymorphism
Moim zdaniem forum jest najlepszym miejscem, żeby dopytać o informację.

Problem w tym, że ty się nie dopytujesz, tylko pytasz o podstawy, a forum to nie jest miejsce do wykładania podstaw.

A co do tekstów, nie znasz podstaw, przeczytaj książkę, itp to w ogóle mógłbyś sobie darować i nie tracić czasu na pisanie takiej treści.
Ty się nie martw o mój czas. A jeśli słuszna sugestia zajrzenia do książki jest dla ciebie problemem, no cóż, nie miej później pretensji, że ktoś wytyka ci braki.