[GELÖST] (Anfänger) ohne includierung Code implementieren?
-
Am Ende des if Blocks wird dein 'spieler' Objekt zerstört. Danach zeigt dein Zeiger irgendwo ins Nirvana und dein Programm kann nichts mehr damit anfangen.
-
Das wusste ich zwar aber mich wundert es dann das es troztdem mit dem Schlaechter-Objekt funktioniert hat aber das kannst du mir ja vielleicht noch erklären? Ich wäre dir sehr verbunden
Ich habe das Problem jetzt wie folgt gelöst indem ich die ganzen vorhandenen Champions erst deklariere:
//VARIABLEN // //Spieler Initialisieren Champion *spielerP; //Champions initialisieren Schattenwanderer schattenwanderer; Schlaechter schlaechter;
und sie dann im if-Block erst/nur die Zuweisung bekommen:
if(menueP == 1) { //Schlaechter wird erstellt spielerP = &schlaechter; choosed = true; } else if(menueP == 2) { //Schattenwanderer wird erstellt spielerP = &schattenwanderer; choosed = true; }
Ich danke vielmals für eure Hilfe und würde den Thread dann schließen (:
-
@levyeme sagte in [GELÖST] (Anfänger) ohne includierung Code implementieren?:
choosed = true;
Es heißt "chosen".
Ich würd eher einen
unique_ptr<>
nehmen:#include <iostream> #include <memory> #include <limits> class Base { public: virtual ~Base() {} virtual void bark() = 0; }; class A : public Base { public: void bark() override { std::cout << "Wau!\n"; } }; class B : public Base { public: void bark() override { std::cout << "Wuff!\n"; } }; std::unique_ptr<Base> create_dog(int type) { switch (type) { case 1: return std::make_unique<A>(); case 2: return std::make_unique<B>(); } return nullptr; } int main() { int choice{}; while (choice != 1 && choice != 2) { if (!(std::cin >> choice)) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } } std::unique_ptr<Base> dog{ create_dog(choice) }; dog->bark(); }
dann liegt keine
Schattenwanderer
- bzwSchlaechter
leiche rum, die nicht benötigt wird.
-
@levyeme Wenn das Objekt zerstört wird, heißt es nicht, dass im Speicher nur noch nullen oder so stehen, sondern da steht halt irgendwas. Daher kann sein, dass das zufällig funktioniert. Aber, dass ist halt Zufall.
-
@swordfish sagte in [GELÖST] (Anfänger) ohne includierung Code implementieren?:
@levyeme sagte in [GELÖST] (Anfänger) ohne includierung Code implementieren?:
choosed = true;
Es heißt "choosen".
Nö, "chosen"
-
omg, ich geh heulen
... naja, zumindest war ich näher dran
-
@Swordfish Will hier nicht rum klug scheißen, aber warum verpackst du dein switch Konstrukt nicht in eine saubere Factory Funktion? Du schmeißt hier einem offensichtlichen Anfänger gleich 2 "Fehler" vor die Füße. Dein
std::unique_ptr<Base> dog;
erstellst du viel zu früh. Würdest du das vll noch umändern, damit man direkt ein "richtiges" Beispiel hat?
-
passts jetzt? ^^
-
@swordfish sagte in [GELÖST] (Anfänger) ohne includierung Code implementieren?:
std::unique_ptr<Base> dog{ create_dog(choice) };
Warum nicht
auto dog{ create_dog(choice) };
?
Aber jo, jetzt hat er was zum Lernen
-
@dnkpp sagte in [GELÖST] (Anfänger) ohne includierung Code implementieren?:
Warum nicht
Du kannst mich mal gern haben.