Problem mit Klassen Objekt, wie macht man ein Objekt in einer Funktion global?



  • hi, ich hab da mal eine Frage. und zwar habe ich mir eine klasse erstellt( gegner ) so diese beinhaltet,
    desen Leben, Mana, Angriff, Rüstung ... und den namen im konstruktor. so nun möchte ich eine Funktion
    erstellen( void CreateCreep(); ) mit dieser Funktion möchte ich nun die daten zufällig belegen. ausserhalb habe ich globale static int variablen.

    static int _life = 0;
    static int _mana = 0;
    static int _level = 0;
    static int _damage = 0;
    static int _ammor = 0;
    
    void CreateCreep() {
    
    	gegner creep( "Knut");
    
    	//nun werden die static variablen mit zufälligen werten belegt
    	...
    	...
    	...
    
    	// mit einer Funktion aus der Klasse gegner belege ich nun die werte in der private, der klasse
    	   gegner 
    
    	creep.SetStatus( _life, _mana, _level, _damage, _ammor );
    }
    

    soviel zu dieser Funktion. dann möchte ich in der main() - Funktion, in der Schleife while(fight), die
    werte von creep mit der Funktion GetStatus(); erfahren, doch das problem ist ja das das Objekt in der
    Funktion CreateCreep(); nicht global ist. hmm hat wer ne idee wie ich das Objekt trotzdem nutzbar machen
    kann.

    für Hilfe bin ich natürlich sehr dankbar.



  • T0bi schrieb:

    hi, ich hab da mal eine Frage. und zwar habe ich mir eine klasse erstellt( gegner ) so diese beinhaltet,
    desen Leben, Mana, Angriff, Rüstung ... und den namen im konstruktor. so nun möchte ich eine Funktion
    erstellen( void CreateCreep(); ) mit dieser Funktion möchte ich nun die daten zufällig belegen. ausserhalb habe ich globale static int variablen.

    static int _life = 0;
    static int _mana = 0;
    static int _level = 0;
    static int _damage = 0;
    static int _ammor = 0;
    
    void CreateCreep() {
    
    	gegner creep( "Knut");
    
    	//nun werden die static variablen mit zufälligen werten belegt
    	...
    	...
    	...
    
    	// mit einer Funktion aus der Klasse gegner belege ich nun die werte in der private, der klasse
    	   gegner 
    
    	creep.SetStatus( _life, _mana, _level, _damage, _ammor );
    }
    

    soviel zu dieser Funktion. dann möchte ich in der main() - Funktion, in der Schleife while(fight), die
    werte von creep mit der Funktion GetStatus(); erfahren, doch das problem ist ja das das Objekt in der
    Funktion CreateCreep(); nicht global ist. hmm hat wer ne idee wie ich das Objekt trotzdem nutzbar machen
    kann.

    für Hilfe bin ich natürlich sehr dankbar.

    Hi,

    die Funktion könnte den Creep dynamisch anlegen

    gegner *creep=new gegner("Knut");
    

    und dann die Adresse des Gegners als Rückgabewert der Funktion nach außen liefern.
    Musst dann eben nur darauf achten, dass der Gegner irgendwo wieder freigegeben wird. Je nach Situation könnte sich ein auto_ptr anbieten.

    Nid



  • hmm kannstee vieleicht mal an meinen quelltext zeigen wie du des meinst.. bin noch net so erfahren das ich alles allein hin bekomme. waer nnett dnake



  • T0bi schrieb:

    hmm kannstee vieleicht mal an meinen quelltext zeigen wie du des meinst.. bin noch net so erfahren das ich alles allein hin bekomme. waer nnett dnake

    Obwohl wir hier im Bereich C++/CLI sind, sieht dein Code wie "normales" C++ aus deswegen habe ich auch normalen Code geschrieben:

    #include <iostream>
    #include <string>
    #include <ctime>
    using namespace std;
    
    class Gegner {
      int life; 
      int mana; 
      int level; 
      int damage; 
      int armor;
      string name;
    
    public:
      Gegner(const string& n, int li, int ma, int le, int da, int ar)
        : name(n), life(li), mana(ma), level(le), damage(da), armor(ar)
      {}
      const string& GetName() const {
        return(name);
      }
    
    };
    
    Gegner* CreateCreep(const string& name) {
      int life=rand();
      int mana=rand();
      int level=rand();
      int damage=rand();
      int armor=rand();
      return(new Gegner(name, life, mana, level, damage, armor));
    }
    
    int main() {
      srand(time(0));
    
      Gegner* g=CreateCreep("Knut");
      cout << g->GetName() << endl;
      delete(g);
    }
    

    Ich habe als Beispiel für einen Zugriff aus main auf das Gegner-Objekt mal eine GetName-Methode geschrieben, da ich nicht weiß, wie deine SetStatus-Methoe aussehen soll.
    Auch die zufälligen Werte werden nicht deinem gewünschten Wertebereich entsprechen, aber das ist dann Feintuning.

    Nid.



  • hmm, jojo danke fürs erste,
    ich denke das ist genau das was ich erst einmal gesucht habe, dass mit dein zufalls werten einschränken des schaf ich denk ich mal schon mit limits.h und % ... . also danke erst einmal



  • ok ich haette mir das eigentlich so vorgestellt

    int CreateEnemy() {
    
        enemy *creep;
        creep = new enemy("Knut");
    
        _life1   = rand() % _life + 1;
        _mana1   = rand() % _mana + 1;
        _level1  = rand() % _level + 1;
        _damage1 = rand() % _damage + 1;
        _ammor1  = rand() % _ammor + 1;
    
        return (creep->SetStatus( _life1, _mana1, _level1, _damage1, _ammor1 ));
    }
    

    wie bekomm ich des hin das es so funktioniert? oder geht des net?



  • T0bi schrieb:

    ok ich haette mir das eigentlich so vorgestellt

    int CreateEnemy() {
    
        enemy *creep;
        creep = new enemy("Knut");
    
        _life1   = rand() % _life + 1;
        _mana1   = rand() % _mana + 1;
        _level1  = rand() % _level + 1;
        _damage1 = rand() % _damage + 1;
        _ammor1  = rand() % _ammor + 1;
    
        return (creep->SetStatus( _life1, _mana1, _level1, _damage1, _ammor1 ));
    }
    

    wie bekomm ich des hin das es so funktioniert? oder geht des net?

    Wenn du im return creep->SetStatus schreibst, dann gibst du den Rückgabewert der Methode SetStatus zurück, nicht das Objekt selbst.
    Du müsstest das aufbröseln:

    creep->SetStatus( _life1, _mana1, _level1, _damage1, _ammor1 );
    return(creep);
    

    Nid.



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten