Klassenmemberfunktion innerhlab von anderer Klassenmemberdefinition aufrufen?
-
Hey C++ler,
Die hierfür relevanten Teile, des Programms sehen soaus:
class Book { public: //. //. //. void New_Book(int ISBN,string title,string autor); void New_Books(); int Search_Book(int ISBN,string title,string autor); void Change_Status(bool change); void Check_Status(int ISBN,string title,string autor); void Check_Data(int n); void Borrow(int ISBN,string title,string autor); void Back(int ISBN,string title,string autor); }; //................................................................ class User { public: //. //. //. void Action(); void Change_Info(string rname,int age,int pw);//Angaben ändern void Borrow(int ISBN,string title,string autor);//Buch ausleihen void Back(int ISBN,string title,string autor);//Buch zurückgeben }; //. //. //. //. //. //. //. void User::Borrow(int ISBN,string title,string autor) { int pb = Book::Search_Book(ISBN,title,autor); bool change = false; Book::Change_Status(p,change); Users[pu].Book = Books[pb]; ++Users[pu].activ; Action(); return; } void User::Back(int ISBN,string title,string autor) { int pb = Book::Search_Book(ISBN,title,autor); bool change = true; Book::Change_Status(pb,change); Users[pu].Book.ISBN = "..."; Users[pu].Book.title = "Kein Buch ausgeliehen"; Users[pu].Book.title = "..."; Action(); return; }Der Compiler meldet mehrere Fehler bei Book:: in den 2 Funktionen am Ende.
Fehlermeldung:
'Book::Search_Book': Unzulässiger Aufruf einer nicht statischen Memberfunktion usw......Warum kann eine Memberfunktion von User keine Memberfunktionen von Book aufrufen? Was mach ich falsch?
-
Tust du mir einen gefallen und postest es nochmal ein wenig übersichtlicher

EDIT: aber bitte mit Edit-Funktion

-
Search_Book ist keine statische Funktion. Wenn du nicht weißt, was das ist, haben wir das Problem bereits gefunden

-
Golfi1812 schrieb:
class Book { public: void New_Book(int ISBN,string title,string autor); void New_Books(); int Search_Book(int ISBN,string title,string autor); void Change_Status(bool change); void Check_Status(int ISBN,string title,string autor); void Check_Data(int n); void Borrow(int ISBN,string title,string autor); void Back(int ISBN,string title,string autor); }; class User { public: void Action(); void Change_Info(string rname,int age,int pw);//Angaben ändern void Borrow(int ISBN,string title,string autor);//Buch ausleihen void Back(int ISBN,string title,string autor);//Buch zurückgeben }; void User::Borrow(int ISBN,string title,string autor) { int pb = Book::Search_Book(ISBN,title,autor); bool change = false; Book::Change_Status(p,change); Users[pu].Book = Books[pb]; ++Users[pu].activ; Action(); return; } void User::Back(int ISBN,string title,string autor) { int pb = Book::Search_Book(ISBN,title,autor); bool change = true; Book::Change_Status(pb,change); Users[pu].Book.ISBN = "..."; Users[pu].Book.title = "Kein Buch ausgeliehen"; Users[pu].Book.title = "..."; Action(); return; }Book::XYZ ----> Mit dieser Syntax spricht man etwas Statisches aus einer Klasse an. Deine Klasse hat nichts statisches.
-
Gut ich habe die Memberfunktion von Book mit static versehen, jetzt klappts, aber was für eine Funktion hat dieses static?Was "macht"es eigentlich?
-
Ach komm, das kannst du Googlen

Kurze erklärung:
static erzeugt eine einmalige Instanz von etwas. Beispiel:#include <iostream> int myfunc() { static int a=1; std::cout << a++ << '\n'; } int main() { for(int ct=0; ct<5; ++ct) myfunc(); }In diesem Beispiel wird die Variable a nur einmal erzeugt, und jedes mal im Funktionsablauf wiederverwendet. Bei Klassen hieße das, static-Member und -Funktionen werden nur einmal erzeugt und müssen außerhalb der Klasse definiert werden (was Variablen angeht
).Edit: Beispiel mit Klassen:
#include <iostream> struct A { static int population; static int get_population() {return population;} }; int A::population = 2; int main() { std::cout << A::population << '\n' << A::get_population() << '\n'; }