Problem mit this und Konvertierungsoperator?
-
Inwiefern unzureichend? Unter "(Boost-Verzeichnis)\libs\smart_ptr\index.htm" gibt es die Interfaces, Dokumentation und ein paar kleine Beispiele für alle enthaltenen Smart-Ptr.
-
Ich finde es insofern nicht ausreichend, dass ich trotz dieser Dokumentation nicht im Stande bin die Smart Pointer richtig einzusetzen, geschweige denn sie überhaupt einzusetzten.Gruß
Glamdring
-
Wüsstest du denn, wie dein Code ohne Smart-Ptr aussehen muss? (Wenn du gerade an einem konkreten Problem sitzt) Die Frage können einem Smart-Ptr nicht abnehmen
-
Nein, das ist ja mein Problem
Ich habs dennoch nochmal probiert, wenns richtig ist hab ich es versdtnaden, wenn nicht: buhuhuhu, naja:
Spieler.h#include <iostream> #include <fstream> #include <string> #include <ostream> #include "all.h" using namespace std; class Player; namespace enums { enum type{Spell, Creature, Place}; enum mode{AM, VM}; enum kind{Untoter, Zombie}; //usw. } class Karte { public: string name; int cost; enums::kind art; enums::type typ; Karte(){} virtual ~Karte() = 0; }; class Kreatur : public Karte { public: int A, V, LB, MLB; int modus; //1 = AM, 2 = VM bool attack(Kreatur* opponent) { opponent->LB -= A - opponent->V; return(true); } bool change_mode() { switch(modus) { case 1: { modus = 2; break; } case 2: { modus = 1; break; } } return(true); } Kreatur(){} virtual ~Kreatur() = 0; }; class Zombie : public Kreatur { public: Zombie() { //art = Zombie; name = "Zombie"; cost = 4; //typ = enums::type[1]; A = 1000; V = 600; LB = 600; MLB = 600; } ~Zombie(){} void Fluch(Kreatur* target){} }; class Moorleiche : public Kreatur { public: Moorleiche() { //art = Untoter; name = "Moorleiche"; cost = 4; //typ = enums::type[1]; A = 1800; V = 1000; LB = 1400; MLB = 1400; } ~Moorleiche(){} void Todeshauch(Kreatur* target) { A+=200; if(attack(target)) { A-=200; } } }; class Player { public: smart_ptr<Karte> Deck[60]; smart_ptr<Karte> Friedhof[60]; smart_ptr<Karte> ingame[60]; int Kreaturen; int HP, AP; bool fill_deck(string nDeck); bool Spell(Karte* Card); bool Creature(Kreatur* Card); Player(string nDeck); ~Player(); }; bool Player::fill_deck(string nDeck) { cout << "Im Deck sind folgende Karten:" << endl; ifstream in; in.open(nDeck.c_str(), ios_base::in); for(string s; getline(in, s);) { if(s == "Zombie") { for (int i=0; i<60;i++) { if(Deck[i].ptr->cost) {} else { cout << "Zombie" << endl; Deck[i].ptr = new Zombie(); } } //break; } else if(s == "Moorleiche") { for (int i=0; i<60;i++) { if(Deck[i].ptr->cost) {} else { cout << "Moorleiche" << endl; Deck[i].ptr = new Zombie(); } } //break; }//Zeile 60 } return(true); } Player::Player(string nDeck) { if(fill_deck(nDeck)) { for(int i=0; i<60; ++i) { Deck[i].ptr = 0; ingame[i].ptr = 0; Friedhof[i].ptr = 0; } HP = 2000; AP = 10; Kreaturen = 0; } else { } } Player::~Player() { delete[] Deck; }
all.h
//Pseudo SmartPointer: template<class T> class smart_ptr { public: T* ptr; public: void init(T* nptr) { ptr = nptr; } smart_ptr() { ptr = 0; } ~smart_ptr() { delete ptr; } };
und dann kommt das hier:
#include "Spieler.h" int main() { Player Player1("C:/Programme/Jugiohspiel/Decks/Deckundead.txt"); return(0); }
Gruß
Glamdring
-
Sieht doch alles richtig aus, nur der Destruktor von player ist unnötig. Und boost::scoped_ptr<> macht dasselbe wie dein smart_ptr<>, nur dass man statt init() reset() nimmt und nicht auf eine öffentliche Elementvariable zugreift, sondern entweder mit * oder -> dereferenziert oder .get() aufruft.
Was geht denn jetzt nicht?
-
operator void schrieb:
Was geht denn jetzt nicht?
sry aber, was meinst du?
Gruß
Glamdring
-
Hm, kompiliert alles problemlos und macht was es soll? Dann nehme ich die Frage zurück
-
Juchuu
Vielen Dank für deine Hilfe!