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 7069 29.09.2015, 21:12
Ostatni post: aht
  Error: Could not find or load main class Test - Eclipse adinho58 1 8077 17.08.2015, 14:05
Ostatni post: Ajgor
  [C++] Microsoft VS - identifier not found Gucio 5 2834 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
Ściana Prosta gra w Builder C++ Kiranek1 1 9547 31.05.2019 15:20
Ostatni post: Szachista
  Menu (Nie widoczne długie opisy) wanhelsing 5 11574 28.04.2019 19:31
Ostatni post: koneton
  Skrypt usuwający pliki sylwiaa1 2 4546 28.04.2019 15:20
Ostatni post: sylwiaa1
  Środowisko do assemblera Physicist 4 10795 21.04.2019 14:04
Ostatni post: Ajgor
  VBA excel dmjs 6 11172 17.04.2019 10:20
Ostatni post: ptrick
  C++ - sens pogłębiania nauki gbr 5 10786 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 10428 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 9513 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 13277 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 10035 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 10468 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 11939 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 10760 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 11576 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 10772 10.01.2019 13:12
Ostatni post: jurek2