Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[C++] Rzutowanie w dół, problem (source type is not polymorphic)

#1
[C++] Rzutowanie w dół, problem (source type is not polymorphic)
Dzień dobry.

rzutowanie działa wspaniale ale nadszedł ten czas że coś nie chce mi się rzutować, choć wiem że ten obiekt to ten obiekt to rzutowanie nie działa.

Gdy używam dynamic_cast:
main.cpp|41|error: cannot dynamic_cast 'TempclassCS' (of type 'class classCS*') to type 'class classCSDwa*' (source type is not polymorphic)|


http://wklej.org/hash/d5b7c06ac32/

A gdy wymuszę za pomocą "(classCSDwa*)" to wtedy dostaję dziwne olbrzymie cyfry.
 System operacyjny: windows_seven Przeglądarka: chrome
#2
RE: [C++] Rzutowanie w dół, problem (source type is not polymorphic)
Dzień dobry, komunikat jest jasny - nie masz metody wirtualnej w klasie bazowej (klasa nie jest polimorficzna), zatem nie można użyć operatora rzutowania dynamic_cast. Wystarczy, że mianujesz destruktor w klasie classCS jako wirtualny, to polimorficzność zadziała.
Kod:
class classCS
{
public:
    //
    virtual ~classCS() {}
};
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#3
RE: [C++] Rzutowanie w dół, problem (source type is not polymorphic)
Bardzo dziękuję, już mi nie wywala błędu.

Ale po tej operacji wskażnik dalej posiada null.

Czyli próba operacji rzutowania się nie powiodła.

To jest wina Vektora?

Coś źle z nim robię?
 System operacyjny: windows_seven Przeglądarka: chrome
#4
RE: [C++] Rzutowanie w dół, problem (source type is not polymorphic)
Czy definicja wektora wygląda następująco:
Kod:
vector<classCS> VektorUniversal;
? Jeśli tak, to operator dynamic_cast zawsze będzie zwracał "wskaźnik zerowy", bo przecież w wektorze znajdują się obiekty klasy classCS a nie klasy classCSDwa. Poza tym niepotrzebnie tworzysz wskaźnik - można przecież bezpośrednio odwołać się do elementu:
Kod:
ss << VektorUniversal[i].cyfra; // albo VectorUniversal.at(i).cyfra
wynik = (VektorUniversal[i].nazwa)+" Cyfra: "+ss.str();
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#5
RE: [C++] Rzutowanie w dół, problem (source type is not polymorphic)
Czyli oznacza to ze musze przechowywać adres w vektorze a nie cały obiekt?

Jak wygląda usuwanie elementu w vektorze?

On sam automatycznie wykrywa i usuwa czy musze ręcznie za pomocą delete a dopiero potem usunąć określony adres?

Kolejne małe pytanie: co się dzieje z obiektem o typie classCSDwa jak wrzucimy do vektora z typem classCS? zostanie on ucięty? czy fragment ucięty tego obiektu gdzieś w jeszcze zasobach jest i jest on niebezpieczny?
 System operacyjny: android Przeglądarka: safari
#6
RE: [C++] Rzutowanie w dół, problem (source type is not polymorphic)
Aby polimorfizm zadziałał, musi być wskaźnik albo referencja, czyli w wektorze powinny być przechowywane adresy (wskaźniki).
Możesz sobie ułatwić nieco sprawę, korzystając z klasy unique_ptr (musi być włączony standard C++11) - wtedy wraz z usunięciem obiektu usunięty zostanie adres, więc nie trzeba pamiętać o wywoływaniu operatora delete.
Do usuwania elementów z wektora służy metoda erase.
Obiekt zostanie obcięty (część wspólna zostanie skopiowana). Jeśli w klasie jawnie przydzielasz pamięć, to pamiętaj o przeładowaniu konstruktora kopiującego i operatora przypisania, bo w przeciwnym wypadku program może się sypać z powodu dwukrotnego zwalniania pamięci.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki ([C++] Rzutowanie w dół, problem (source type is not polymorphic))
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  C# - Operator '^' cannot be applied to operands of type 'string' and 'string' off-line 1 6996 29.09.2015, 21:12
Ostatni post: aht
  Error: Could not find or load main class Test - Eclipse adinho58 1 7999 17.08.2015, 14:05
Ostatni post: Ajgor
  [C++] Microsoft VS - identifier not found Gucio 5 2828 12.05.2013, 09:19
Ostatni post: Gucio

Skocz do:


Wybrane wątki ([C++] Rzutowanie w dół, problem (source type is not polymorphic))
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Klasa wewnętrzna w C++ Physicist 4 10031 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 9136 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 12777 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 9630 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 10065 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 11542 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 10368 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 11169 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 10395 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 11103 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 13789 19.12.2018 16:29
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 11559 07.11.2018 13:41
Ostatni post: Ajgor
Scared Ipad Pro programowanie? NissmoOne 4 12681 06.10.2018 12:22
Ostatni post: NissmoOne
  C# pierwsza pusta komórka Excel DonCorleone 0 11206 21.09.2018 16:58
Ostatni post: DonCorleone
  .bat nie kompresuje plików GIENTY 3 11714 06.09.2018 07:20
Ostatni post: broda99