Tablica dynamiczna klas

dział ogólny

Tablica dynamiczna klas

Nowy postprzez Bert1223 » niedziela, 22 listopada 2009, 11:48

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.
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Tablica dynamiczna klas

Nowy postprzez Cyfrowy Baron » niedziela, 22 listopada 2009, 11:59

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...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Tablica dynamiczna klas

Nowy postprzez Bert1223 » niedziela, 22 listopada 2009, 12:22

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
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Tablica dynamiczna klas

Nowy postprzez polymorphism » niedziela, 22 listopada 2009, 12:51

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.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2278
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 213
System operacyjny: Windows 8.1
Windows 10
Linux Mint 20
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Tablica dynamiczna klas

Nowy postprzez Bert1223 » niedziela, 22 listopada 2009, 13:03

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.
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Tablica dynamiczna klas

Nowy postprzez polymorphism » niedziela, 22 listopada 2009, 13:53

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.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2278
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 213
System operacyjny: Windows 8.1
Windows 10
Linux Mint 20
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Tablica dynamiczna klas

Nowy postprzez Bert1223 » niedziela, 22 listopada 2009, 14:30

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.
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Tablica dynamiczna klas

Nowy postprzez polymorphism » niedziela, 22 listopada 2009, 20:28

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.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2278
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 213
System operacyjny: Windows 8.1
Windows 10
Linux Mint 20
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości

cron