eine Variable einer Klasse ändern
-
Hallo,
da ich totaler Anfänger bin und gerade meine ersten selbstständigen schritte in C++ mache...
Ein Black Jack auf der Konsole läuft schon einwandfrei
Nur leider war dort alles in der main zusammen "geklatscht"So nun wollt ich mich mal an ein Pokerspiel(Texas Holdem)versuchen!
Nur was mir Probleme bereitet... ist die sache mit den klassen und dateien...Ich dachte mir das so: eine Klasse Dealer,Spieler,NPC1,NPC2 und vllt noch Kartenstapel
wenn nun Dealer die Funktion Kartenausteilen macht kann ich die Variable von Spieler nicht verändern.
void Dealer::kartenausteilen( ) { Spieler::eigenekarten = Spieler::eigenekarten + 1; }1>------ Erstellen gestartet: Projekt: Poker_Texas_Holdem, Konfiguration: Debug Win32 ------
1> Spieler.cpp
1>c:\users\\documents\visual studio 2010\projects\_poker_texas_holdem\poker_texas_holdem\spieler.cpp(5): error C2597: Ungültiger Verweis auf nicht-statischen Member 'Spieler::eigenekarten'
1> Dealer.cpp
1>c:\users\_\documents\visual studio 2010\projects\_poker_texas_holdem\poker_texas_holdem\dealer.cpp(6): error C2597: Ungültiger Verweis auf nicht-statischen Member 'Spieler::eigenekarten'
1> Code wird generiert...
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Wenn ich da static vor int eigenekartenschreibe kommt das:
1>------ Erstellen gestartet: Projekt: Poker_Texas_Holdem, Konfiguration: Debug Win32 ------
1>Dealer.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static int Spieler::eigenekarten" (?eigenekarten@Spieler@@2HA)".
1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static int Spieler::eigenekarten" (?eigenekarten@Spieler@@2HA)".
1>Spieler.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static int Spieler::eigenekarten" (?eigenekarten@Spieler@@2HA)".
1>C:\Users\____\documents\visual studio 2010\Projects\_Poker_Texas_Holdem\Debug\Poker_Texas_Holdem.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Also wie kann eine Funktion von Klasse A die Variablen von Klasse B verändern?
Oder geht das gar nicht?
-
XY213 schrieb:
Also wie kann eine Funktion von Klasse A die Variablen von Klasse B verändern?
Oder geht das gar nicht?Mein professioneller Ratschlag: Hol dir ein Buch über C++. Ein vernünftiges.
Ich bin mir verdammt sicher, dass eigeneKarten
1. Ein Zähler ist; Nenne es doch
AnzahlEigeneKartenoder mach gleich eine eigene KlasseKarten, die dann einenstd::vectorusw. enthält.
2. alsprivateinSpielerdeklariert, was eigentlich dein Problem ist.Schlechter Stil wäre es jetzt, AnzahlEigeneKarten (bzw. eigeneKarten)
publiczu machen, oder KlasseBbzw.Dealeralsfriend; stattdessen mach einen setter (genügend Informationen hierzu findest du im Netz, aber hol dir lieber gleich ein gutes Buch) und getter.
-
Typischer Fehler von jemandem, der versucht in die objektorientierte Programmierung umzusteigen. Gerettet hat dich, dass du "static" offenbar nicht kennst, und deswegen hier fragen musst. Das da ist keine Objektorientierung, das ist Klassen als namespaces misbraucht:
class Spieler { public: static int x; static double foo(); }; class Dealer { public: static whaterver y; static float bar(); };Statische Methoden ruft man nämlich mit :: auf. Aber das ist nicht was du willst. Du willst, dass jede Instanz der Klasse Spieler einen Spieler symbolisiert, und das gilt auch für deine anderen Klassen. Dann ruft man Methoden nämlich mit dem . auf.
class Spieler { void foo() {} }; int main() { Spieler s; s.foo(); }Allerdings solltest du da erst mal im Kleinen etwas ausprobieren, bevor du dein Pokerspiel machst.

-
Hacker schrieb:
Mein professioneller Ratschlag
Ein Ratschlag von dir ist schon von vornherein nicht professionell.
-
314159265358979 schrieb:
Hacker schrieb:
Mein professioneller Ratschlag
Ein Ratschlag von dir ist schon von vornherein nicht professionell.
Ein flame von dir hat schon von vornherein keinen Sinn.
Aber darin, dass er sich ein Buch holen soll, sollst du mir nicht widersprechen.