probleme mit dem "dot operator"
-
ich hab eine totale noob frage:
wie kann ich methoden einer klasse aufrufen?!
das hier sit mein programmcode:class goblin gb; gb.passiv(); gb.aktiv();
ich habs in vielen büchern und auf vielen webseiten so gelesen,aber es will einfach nicht!
die klasse sieht so aus:class goblin { public: int resist; int schaden; public: void aktiv(); void passiv(); goblin(int w) : resist(1),schaden(5){} }; void goblin::aktiv() { int zufallszahl2; srand(time(NULL)); zufallszahl2=(rand()%21)+0; if(zufallszahl2 < 7) { cout<<"treffer von goblin!"<<endl; cout<<"der char verlor"<<schaden<<"derzeitigee hp:"<<hp<<endl; hp=hp-::schaden+::resist; } } void goblin::passiv() { int zuffalszahl; srand(time(NULL)); zufallszahl=(rand()%21)+0; if(zufallszahl < 11) { cout<<"char hat getroffen!"<<endl; hpm=hpm-::schaden+::resist; if(hpm <=0) { xp = xp + 55; } } }
kann mir jemand helfen?
-
Eigentlich verwendest du . genau richtig. Das "class goblin" ist übrigens unnötig, der Typ heißt einfach nur "goblin". Der Fehler liegt also eher im Rest des Programms, vielleicht solltest du mal die Fehlermeldung mit Zeilenangabe posten?
Übrigens ruft man srand für gewöhnlich nur einmal beim Programmstart auf.
-
mach das class bei goblin gb; weg
-
Hallo master_tradiaz,
hab deinen Code mal ein bisschen verändert. Bin davon ausgegangen, dass hp, hpm und xp Eigenschaften von goblin darstellen. Ich glaube aber eigentlich, dass du damit Eigenschaften einer anderen Spielfigur gemeint hast. Das müsstest du dann aber anders lösen.
#include <iostream> #include <ctime> #include <cstdlib> using std::cout; using std::endl; class goblin { // public: // das soll wohl eher private heissen, oder? private: int resist; int schaden; int hp; // du benutzt diese Variablen in aktiv() und passiv() int hpm; // also solltest du sie vielleicht deklarieren int xp; // hp = healthpoints?, hpm = ?, xp = experience? public: // Standard-Konstruktor goblin(): resist(1),schaden(5),hp(10),hpm(10),xp(0){}; // Der Vollständigkeit halber, der Standard-Destruktor ~goblin(){}; //goblin(int w) : resist(1),schaden(5){} // wofür soll int w gut sein? void aktiv(); void passiv(); }; void goblin::aktiv() { int zufallszahl2; //srand(time(NULL)); zufallszahl2=(std::rand()%21);//+0; // wozu +0? if(zufallszahl2 < 7) { hp += (resist-schaden); // macht es nicht mehr Sinn, erst den neuen Wert von // hp zu berechnen, bevor du ihn ausgibst? cout<<"treffer von goblin!"<<endl; cout<<"der char verlor "<<schaden<<", derzeitige hp: "<<hp<<endl; //hp=hp-::schaden+::resist; } } void goblin::passiv() { int zufallszahl; //srand(time(NULL)); zufallszahl=(std::rand()%21);//+0; // wozu +0? if(zufallszahl < 11) { cout<<"char hat getroffen!"<<endl; //hpm=hpm-::schaden+::resist; hpm += (resist-schaden); if(hpm <=0) { xp = xp + 55; } } } int main() { goblin gb; // Hier rufst du den Standardkonstruktor auf, den du aber gar nicht definiert hattest std::srand(std::time(NULL)); // srand nur einmal "füttern" gb.passiv(); gb.aktiv(); }
So, das funktioniert bei mir, ich hoffe es sind keine Fehler mehr drin.
Gruß Jens
Edit: Lesbarkeit verbessert.
-
erstmal dsanke für die antworten.
@D A U:das mag bei dir gehen,aber nicht bei mir
.die fehlermelldung von deinem code sind die gleichen wie von meinem:F:\programmier tools\console\hanel.cpp(75) : warning C4101: 'zuffalszahl' : Unreferenzierte lokale Variable
F:\programmier tools\console\hanel.cpp(126) : error C2143: Syntaxfehler : Fehlendes ';' vor '.'
F:\programmier tools\console\hanel.cpp(126)(((ist in der zeile in der passiv aufgerufen wird))) : error C2143: Syntaxfehler : Fehlendes ';' vor '.'
F:\programmier tools\console\hanel.cpp(127) : error C2065: 'aktiv' : nichtdeklarierter Bezeichnermach das class bei goblin gb; weg
schon probiert,bringt nix.....
edit:
#include <iostream> using namespace std; class goblin { public: int a; }; int main() { goblin.a=1; return 0; }
glaubt ja nicht,dass das funktioniert....
-
Du kannst ja auch keine Variable einer Klasse ändern. Das sollte aber gehen:
int main() { goblin sweetheart; sweetheart.a = 46; }
-
YEEHA!
das hier funktioniert!#include <iostream> using namespace std; class goblin { public: int a; int ro(); }; goblin::ro() { cout<<a<<endl; int g; cin>>g; return 0; } int main() { goblin sweetheart; sweetheart.a = 46; sweetheart.ro(); return 0; }
allerhöchsten dank!!!!!