• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ builder obiektowo błąd kompilacji

Object Storage Arubacloud
0 głosów
182 wizyt
pytanie zadane 12 grudnia 2015 w C i C++ przez lukasz_m Obywatel (1,380 p.)

Witam. Próbuję stworzyć program w C++ Builder obiektowo i wyskakuje mi taki błąd

Wie ktoś może o co chodzi?

1 odpowiedź

0 głosów
odpowiedź 12 grudnia 2015 przez MetGang Nałogowiec (34,360 p.)
wybrane 13 grudnia 2015 przez lukasz_m
 
Najlepsza
"Access violation at address" czyli coś nie tak ze wskaźnikami, wchodzisz na nieodpowiedni obszar pamięci. Zapewne odwołujesz się do nieistniejącego (lub zwolnionego) zasobu. Sprawdź wskaźniki i obiekty do nich przypisane.
komentarz 13 grudnia 2015 przez lukasz_m Obywatel (1,380 p.)
Faktycznie chyba coś nie tak ze wskaźnikami. Dopiero zaczynam pisać obiektowo

i jak narazie się trochę motam. Mógłbyś rzucić okiem na ten kod i powiedzieć co robię źle

Gdy definuję metodę w klasie to muszę za każdym razem określać Formę w której ta metoda będzie użyta jak poniżej? Trochę mi się to wydaje bez sensu:) Można to napisać inaczej?

Form2-> <jakiś obiekt> ->Visible = true;

klasa.h http://wklej.org/id/1875530/
klasa.cpp http://wklej.org/id/1875532/
main()  http://wklej.org/id/1875533/

Dzięki:)
komentarz 13 grudnia 2015 przez MetGang Nałogowiec (34,360 p.)

Niezła sieczka w kodzie. Nie wiem po co Ci 2 formy (2 okna) na początek nauki, tylko Ci się pomiesza wszystko. Zrób konstruktor do klasy Asteroid i daj obiekt do klasy TForm, tak abyś miał obiekt dostępny w całym oknie (całej formie) i był on zainicjalizowany przy tworzeniu okna (formy), bo teraz jak masz:

void __fastcall TForm2::timerTimer(TObject *Sender)
{
    Asteroid a;
    a.Lot();
}
void __fastcall TForm2::FormCreate(TObject *Sender)
{
    Asteroid a;
    a.Wyswietl();
}

Tworzy Ci obiekt tymczasowy przy wykonaniu tych funkcji, gdzie przy Wyswietl() to jeszcze pół biedy, bo masz new TImage (bez delete zresztą, RAM śmiecisz), to w Lot() nie masz żadnego new, a więc 

timer->Enabled = true;

wywołujesz bez żadnego obiektu (timer==NULL). Trochę chaotycznie napisałem, ale myślę, że coś da się zrozumieć. Ogólnie patrząc na błędy polecam ogarnąć jeszcze raz obiektówkę.

komentarz 14 grudnia 2015 przez lukasz_m Obywatel (1,380 p.)
Dzięki. Wolałbym pozostać przy 2 Formach - w pierwszej ma być menu programu, a w drugiej program główny, czyli gra którą zrobiłem już strukturalnie, a teraz próbuję ją napisać obiektowo. W grze leci się statkiem i strzela się do pojawiających obiektów najpierw asteroidów, później innych statków.

Rozumiem, że powinienem stworzyć konstruktor, który ustawi startowe parametry obiektu?

"daj obiekt do klasy  TForm" - tutaj nie wiem o co Ci chodzi

Jeśli chodzi o wyczyszczenie wskaźnika to nie wiem jakim poleceniem to zrobić, tak jak w Code Blocksie poprzez delete <obiekt>?
komentarz 14 grudnia 2015 przez MetGang Nałogowiec (34,360 p.)

C++ to C++ więc usuwasz tak jak napisałeś: delete <obiekt>

Co do: "daj obiekt do klasy  TForm", chodzi coś takiego:

class TForm2
{
public:
    ClassObject obj;
}

 

Podobne pytania

–2 głosów
1 odpowiedź 181 wizyt
pytanie zadane 28 października 2015 w C i C++ przez Dayner Nowicjusz (120 p.)
+1 głos
1 odpowiedź 4,824 wizyt
+1 głos
2 odpowiedzi 214 wizyt
pytanie zadane 16 grudnia 2015 w C i C++ przez selekcik Nowicjusz (130 p.)

92,620 zapytań

141,469 odpowiedzi

319,793 komentarzy

62,002 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...