Undeklarierte Funktion
-
Hallo erstmal,
ich habe mal wieder ein Problem mit meinem Programm. Der Compiler sagt mir, dass eine Funktion undeklariert sei, die ich aber in der Headerdatei deklariert habe. Hier meine Dateien:
Konsolengame.cpp:
#include <iostream> #include <windows.h> #include "mensch.h" using namespace std; int randy ( int area ); int main() { Mensch nexus; Mensch gorn; nexus.erzeuge ("Nexus" , 100 , 50); gorn.erzeuge ("Gorn" , 100 , 50); while ( true ) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); cout<<"Zu wirkender Zauber:\n"; string pspell; cin>>pspell; cout<<"\nZiel:\n"; string ptarget; cin>>ptarget; system("cls"); int manacheck; manacheck = checkmana(pspell); if (manacheck == 0) { nexus.nzaubern (pspell , ptarget); if (pspell == "Feuerball") { gorn.dellife(20); } else if (pspell == "Feuerpfeil") { gorn.dellife(10); } int kispell; kispell = randy (2); // system("COLOR 04"); if (kispell == 0) { gorn.gzaubern( "Feuerpfeil" , "Nexus" ); nexus.dellife(10); } else if (kispell == 1) { gorn.gzaubern( "Feuerball" , "Nexus" ); nexus.dellife(20); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_GREEN); cout<<"NEXUS\n"; nexus.stat(1); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED); cout<<"\n\nGORN\n"; gorn.stat(0); int doap; int doag; doap = nexus.checkstatus(); doag = gorn.checkstatus(); if (doap == 1) { cout<<"Nexus ist tot! Das Programm wird nun beendet!"; Sleep(5000); // return 0; } if (doag == 1) { cout<<"Gorn ist tot! Das Programm wird nun beendet!"; Sleep(5000); // return 0; } if (doag == 1 || doap == 1) { return 0; } } else { cout<<"Nicht genug Mana. Wiederholung des Zuges!"; } cout<<"\n\n\n\n"; } } int randy ( int area ) { int rn = time(0)%area; return rn; }mensch.h:
#include <iostream> #ifndef _MENSCH_H_ #define _MENSCH_H_ using namespace std; int i = 0; class Mensch { public: char name[30]; int life; int mana; void erzeuge (const char* n , int f , int m); void stat( int l ); void nzaubern ( const string spell , const string b ); void gzaubern ( const string spell , const string b ); void lp (int d); void dellife ( int lip ); int checkstatus ( ); int checkmana( const string cspell ); }; void Mensch::erzeuge(const char* n , int f , int m) { strncpy( name, n, sizeof(name)-1 ); name[sizeof(name)] = '\0'; life = f; mana = m; } void Mensch::stat ( int l ) { cout<<"Lebenspunkte: "<<life<<"\n"; if (l == 1) { cout<<"Mana: "<<mana<<"\n"; } } void Mensch::nzaubern ( const string x , const string b ) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); cout<<name << " wirkt den Zauber " << x << " auf " << b <<"\n\n"; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_GREEN); if (x == "Feuerball") { mana -= 10; } else if (x == "Feuerpfeil") { mana -= 5; } } void Mensch::gzaubern ( const string x , const string b ) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); cout<<name << " wirkt den Zauber " << x << " auf " << b <<"\n\n"; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_GREEN); if (x == "Feuerball") { mana -= 10; } else if (x == "Feuerpfeil") { mana -= 5; } } void Mensch::lp (int d) { life -= d; if (life <= 0) { life = 0; } cout<<name << " hat " << life << " Lebenspunkte!\n"; } void Mensch::dellife ( int lip ) { life -= lip; } int Mensch::checkstatus ( ) { if (life == 0) { return 1; } else { return 0; } } int Mensch::checkmana(string cspell) { int back; if (cspell == "Feuerball") { if (mana < 10) { back = 1; } } if (cspell == "Feuerpfeil") { if (mana < 5) { back = 1; } } return back; } #endifEs sieht da noch ziemlich unaufgeräumt aus, aber ich denke das hindert euch bei diesem Problem nicht.
Das ganze soll ein Pseude-Konsolenspiel werden, die angeblich undeklarierte Funktion ist checkmana und der Fehler tritt in der Datei Konsolengame.cpp in der Zeile 30 auf, also da, wo die Funktion aufgerufen wird.Hoffe auf schnelle Hilfe
mfG Alemarius Nexus
-
Kannst Methode "Mensch::checkmana ()" nur zusammen mit einer Instanz von "Mensch" aufrufen.
Entweder "nexus.checkmana (pspell)" oder "gorn.checkmana (pspell)".

-
Und für C++-Code sind die Cpp-Codetags besser als die normalen Code-Tags..
Also stattundeinfach
undverwenden

-
Dummer Fehler, darauf hätte ich auch kommen können.
Wie auch immer, danke für die Hilfe.