Skocz do zawartości
kamail86

Wywołanie konstruktora

Rekomendowane odpowiedzi

Jak wywołać konstruktor Plik wzor, tak by na ekranie wyświetlił się napis "przykladowy napis"? Bo wpisanie w main "Plik wzór;" go nie wywołuje. Poniżej kod:

 

 

  Pokaż ukrytą zawartość

 

 

Konkretnie chodzi o wywołanie tego:

 

  Pokaż ukrytą zawartość

 

Edytowane przez kamail86

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gwoli ścisłości: to konstruktor kopiujący. Kod KoVola powinien działać, podobnie jak Plik foo(Plik()). Lecz nic dziwnego, że się wysypuje, skoro próbujesz nadawać rozmiar buf niezainicjalizowaną zmienną rozmiar, a nawet operować na nullptr.

 

buf = new char[rozmiar];
Nie inicjalizujesz nigdzie zmiennej rozmiar, przez co ma ona wartość niezdefiniowaną. Niebezpiecznie jest przydzielać niezdefiniowany rozmiarowo obszar pamięci.

 

buf[i] = wzor.buf[i];
Zmienna wzor.buf inicjalizowana jest w konstruktorze domyślnym wskaźnikiem NULL, którego nie da się wyłuskać ani nie można wywoływać na jego rzecz żadnych operatorów.

 

Kod jest kompletnie wyzuty z zabezpieczeń, a uwzględnienie najprostszego z nich pozwoli ci osiągnąć cel:

 

Plik(const Plik &wzor) {    int i;    rozmiar = wzor.rozmiar;    strcpy(nazwa, wzor.nazwa);    if (wzor.buf) {        buf = new char[rozmiar];        for(i=0;i<rozmiar;i++)            buf[i] = wzor.buf[i];    } else {        buf = NULL;    }    for(i=0;i<256;i++)        liczbaW[i] = wzor.liczbaW[i];    cout<<"przykladowy napis"; }
Dlaczego nie używasz std::string?
  • Upvote 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Co do tych braków w kodzie to po prostu wszystkiego nie kopiowałem by nie było zbyt dużo doczytania ;) Natomiast co do wysypywania się programu to już wiem o co chodziło. Program był pisany na laptopie. Natomiast poradę KoVola testowałem na stacjonarce i widocznie na niej jest coś nie tak z kompilatorem bo na lapku działa dobrze ;) Dzięki wszystkim za pomoc.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.



×
×
  • Dodaj nową pozycję...