class in verschiedene Funktionen uebernehmen



  • Hey, ich bin noch relativ neu in der c++ Pogrammierung und habe da mal eine Frage.

    Ich habe eine Klasse namens "Karten" diese moechte ich in einer Void Funktion "beschreiben" und mit der int main wieder auslesen.

    Doch leider "beschreibt" die void nicht die Klasse, dadurch kann ich sie auch nicht mit int main aufrufen..

    class Karten
    {
    
    private:
    
    public:
    
    	std::string name;
    	int nummer;
    	int leben;
    	int angr;
    	int manma;
    	int vert;
    	int level;
    	int exp;
    	int needexp;
    }
    
    int main() {
    
    	k1.KartenAnsicht();
    
    }
    
    void setup() {
    
    	Karten k1;
    	k1.name = "Hallo";
    	k1.nummer = 1;
    	k1.leben = 10;
    	k1.angr = 170;
    	k1.manma = 50;
    	k1.vert = 70;
    
    }
    

    MFG
    Kato 🙂


  • Mod

    Eine Klasse (hier: Karten) ist ein Bauplan; ein Objekt (hier: k1) ist etwas, das nach diesem Plan gebaut wurde. Wenn du ein Objekt veränderst, veränderst du nicht den Bauplan, sondern eben nur dieses eine Objekt.

    Dein Programm ist syntaktisch falsch und kann nicht compiliert werden, daher kann man nicht konkret sagen, was genau du dir hier erhoffst.



  • Also ich versuche mehrere eintraege der klasse Karte zu machen also zb. k1 , k2 usw.

    Ich moechte sie aber nicht in der main Funktion machen (so wie im quellcode unter dem text )

    Sonderen eine eigene Funktion zu haben wo ich sie am Anfang alle eintrage bei Pogramm Start. ( In meinem Fall jetzt Funktion Setup)

    class Karten
    {
    
    private:
    
    public:
    
        std::string name;
        int nummer;
        int leben;
        int angr;
        int manma;
        int vert;
        int level;
        int exp;
        int needexp;
    
    void KartenAnsicht()
    {
    std::cout << name;
    std::cout << leben:
    //....
    }
    
    }
    
    int main() {
    
    // Karte k1, k2 nicht in der main Funktion "festlegen" sondern in einer anderen //Funktion Z.b void setup().
    //aber k1, k2 mit der main Funktion aufrufen.
    
      Karten k1;
        k1.name = "Hallo";
        k1.nummer = 1;
        k1.leben = 10;
        k1.angr = 170;
        k1.manma = 50;
        k1.vert = 70;
    
    Karten k2;
        k2.name = "Hallo";
        k2.nummer = 1;
        k2.leben = 10;
        k2.angr = 170;
        k2.manma = 50;
        k2.vert = 70;
    
    //ich mochte sie in der main Funktion nur aufrufen mit den unteren 2 Zeilen.
        k1.KartenAnsicht();
        k2.KartenAnsicht();
    
    }
    
    void setup() {
    
    }
    


  • Warum willst du das machen?

    Genau so geht es nicht.



  • manni66 schrieb:

    Warum willst du das machen?

    Genau so geht es nicht.

    Ich moechte einmal die werte festlegen und spater bei bedarf aendern.
    Wenn ich die Werte in der main Funktion festlege werden sie ja immer wieder ueberschrieben wenn ich die main Funktion aufrufe.

    Das wegen habe ich mir gedacht das ich eine eigene Funktion erstelle die nur beim start ausgefuert wird.



  • Erstmal sollten wir eine einfache Frage klären: sollen all deine erzeugten Karten dieselben Einstellungen/Werte haben?

    Wenn all deine Karten auf bestimmte Art initialisiert sein sollen, bietet sich ein Konstruktor an, der diese setzt.

    Also

    Karten::Karten() 
      : name("Hallo")
      , nummer(1)
      , leben(10)
      , ...
    {}
    

    Ansonsten noch ein Tipp bzgl. Benennungen:
    Deine Klasse "Karten" repräsentiert EINE Karte, nenne sie daher besser "Karte". Verwende den Plural für etwas, das wirklich Mehrzahl ist. Auch würde ich dazu raten, "vert" in "verteidigung" und "angr" in "angriff" umzubenennen. Ein paar Buchstaben mehr machen es gleich viel lesbarer. Karten::exp hat nichts mit der Exp-Funtion gemeinsam, sondern soll "experience" heißen? Warum auf einmal Englisch? Mische die Sprachen nicht zu sehr.



  • Kato1998 schrieb:

    Wenn ich die Werte in der main Funktion festlege werden sie ja immer wieder ueberschrieben wenn ich die main Funktion aufrufe.

    Das wegen habe ich mir gedacht das ich eine eigene Funktion erstelle die nur beim start ausgefuert wird.

    Preisfrage: wie oft wird denn "main" aufgrufen?
    Doch wohl nur 1x!

    Irgendwie ist unklar, was du vorhast.



  • Danke fuer deine Tipps ich werde sie umsetzen 😃

    Ja bis jetzt wir sie nur 1 mal abgerufen , doch auch wenn ich versuche sie von anderen Funktionen abzurufen funktioniert es nicht ...

    Brauche ich da irgendwelche Pointer oder so ?



  • Du darfst die main Funktion nicht aufrufen.



  • Kato1998 schrieb:

    Ja bis jetzt wir sie nur 1 mal abgerufen , doch auch wenn ich versuche sie von anderen Funktionen abzurufen funktioniert es nicht ...

    main wird genau 1x aufgerufen. Du rufst main hoffentlich nicht selbst auf. Der C++-Standard sagt in Basic Concepts/Main function:

    The function main shall not be used within a program.

    Ich verstehe das so, dass man main nicht selbst aufrufen darf. Wozu würdest du das überhaupt wollen?

    Wenn du was anderes machst, musst du dich klarer ausdrücken. Und vor allem nicht mit "funktioniert nicht" - wir können ja nicht raten, was nicht funktioniert, warum das so ist, was du probiert hast und vor allem was du mit "funktioniert" meinst. Kommt eine Fehler, stürzt alles ab? Nachvollziehbarer Quelltext bitte!

    Lies dazu bitte auch die oben im Forum angehefteten mit "Wichtig" markierten Threads.


Anmelden zum Antworten