Aufruf einer Klassenfunktion



  • Hallo zusammen,

    ich sitze jetzt schon seit einigen Stunden daran und finde keine Lösung. Da ich momentan erst anfange diese Sprache zu lernen, liegt es sicherlich an meinem Nicht-Wissen.
    Aber vielleicht kann mir doch jemand schnell helfen.
    Ich bekomme es einfach nicht hin den Aufruf der Funktion richtig zu coden. Hab soweit die meisten Fehler schon rausbekommen, möchte aber nun die Funktion SearchEmployee() der Klasse EMPLOYEE aufrufen, bekomme aber immer wieder Fehlermeldungen. Vielen Dank im voraus.

    //============================================================================
    	// Name        : 
    	// Author      : 
    	// Version     : 1.0
    	// Description : Reisekostenverwaltung
    	//============================================================================
    
    	#include <stdlib.h>//einbinden der Headerdateien
    	#include "cstdlib"
    	#include "iostream"
    	#include "string"
    
    	using namespace std;//Namensraum
    
    	int i=1000;     //Variable zur Vergabe der Personalnummer
    	int m=0;            //deklariert den Integer für das arrayEmployee
    
    	void searchEmployee();
    
    	class EMPLOYEE  {
    
    	protected:    //Deklaration der privaten Attribute
    	string name;
    	string surname;
    	int acounting_unit;
    	int staff_id;
    	bool journey_possible;
    	float budget_used;
    	EMPLOYEE *next_one;     //Verkettungszeiger
    
    	public:     //Deklaration der Methoden als public
    
    	EMPLOYEE(string n,string sur,int a,int s,bool j, float b):name(n), surname(sur), acounting_unit(a), staff_id(s), journey_possible(j), budget_used(b){}
    
    	string getName () const {return name;}
    	string getSurname () const {return surname;}
    	int getAcounting_unit() const {return acounting_unit;}
    	int getStaff_id() const {return staff_id;}
    	bool getJourney_possible() const {return journey_possible;}
    	float getBudget_used() const {return budget_used;}
    
    	void CreateEmployee (void);
    	void ShowEmployee (void);
    	void SearchEmployee (EMPLOYEE*);
    	void ChangeJourneyPossibleStatus (void);
    	int ShowAcounting_unit(void);
    	string ShowName(void);
    
    	EMPLOYEE() {}        //Standardkonstruktor
    	//~EMPLOYEE();        //Destruktor
    	};
    
    	//Methoden zum anzeigen der Daten des Mitarbeiter und Möglichkeit zum ändern des Statuses
    	void EMPLOYEE::ShowEmployee() {
    
    		cout    << " Personalnummer: "<<staff_id<<endl;
    		cout    << " Name: "<<name<<endl;
    		cout    << " Vorname: "<<surname<<endl;
    		cout    << " Kostenstelle: "<<acounting_unit<<endl;
    		if (journey_possible = true) {
    
    			cout    << "Mitarbeiter darf weitere Reisen antreten"<<endl;
    		}
    		else {
    
    			char ant = 'j';
    
    			while ( ant != 'n') {
    				cout    << "Mitarbeiter darf keine weiteren Reisen antreten."<<endl;
    				cout    << "Möchten Sie dem Mitarbeiter dennoch erlauben die Reise anzutreten?"<<endl;
    				cout    << " 'j' für Ja / 'n' für Nein "<<endl;
    				cin >> ant;
    				EMPLOYEE::journey_possible = true;
    				ant = 'n';
    			}
    
    		}
    
    	}
    
    	int EMPLOYEE::ShowAcounting_unit(void) {
    
    		return staff_id;
    	}
    	string EMPLOYEE::ShowName(void){
    
    		return name;
    	}
    	// Methode zum Anlegen Mitarbeiter
    	void EMPLOYEE::CreateEmployee(){
    
    		cout    <<  "Bitte geben Sie den Namen des Mitarbeiters ein!"   <<endl;
    		cin >> name;
    		cout    <<  "Bitte geben Sie den Vornamen des Mitarbeiters ein!"<<endl;
    		cin >> surname;
    		cout    <<  "Bitte geben Sie die Kostenstelle des Mitarbeiters ein!"<<endl;
    		cin >> acounting_unit;
    		cout << endl;
    		staff_id = i++;
    		journey_possible = true;
    		budget_used = '0';
    
    		new EMPLOYEE(name, surname, acounting_unit, staff_id, journey_possible, budget_used);
    	}
    
    	int main()
    	{
    
    	int s=0, eing;      //deklariert integer auf 0, wird für das Menü verwendet
    
    	EMPLOYEE arrayEmployee[10]; // Feld, das 10 Instanzen aufnehmen kann
    
    		cout    <<  "Reisekostenverwaltung"                         <<endl<<endl<<endl;
    
    							//Schleife für die Ausgabe des Menues mit Anweisung für die Auswahl
    		while (s==0)
    		{
    			cout    <<  "[1]    Mitarbeiter anlegen"                            <<endl;
    			cout    <<  "[2]    Reisefreigabe pruefen"                          <<endl;
    			cout    <<  "[3]    Reisekosten erfassen"                           <<endl;
    			cout    <<  "[4]    Uebersicht Gesamtreisekosten Mitarbeiter"       <<endl;
    			cout    <<  "[5]    Uebersicht Gesamtreisekosten Kostenstelle"      <<endl;
    			cout    <<  "[0]    Programm beenden"                               <<endl;
    			cout                                                                <<endl;
    			cout    <<  "Bitte treffen Sie ihre Wahl."                          <<endl;
    
    		cin>>eing;
    
    	//Unter Abhängigkeit der Eingabe Sprung zu verschiedenen Anweisungsblöcken
    			switch (eing)
    			{
    
    			case 1: {
    						cout    << "Anlegen eines neuen Mitarbeiters!"<<endl<<endl;
    						arrayEmployee[m].CreateEmployee();//Aufruf der Funktion zur Anlage eines Mitarbeiters
    						cout    << "Mitarbeiter wurde angelegt: "   <<endl;
    						arrayEmployee[m].ShowEmployee();
    
    					  }
    					  break;
    
    			case 2: {
    
    					  }
    					  break;
    
    			case 3: {
    
    					  arrayEmployee[0].SearchEmployee(EMPLOYEE*);
    
    					  }
    					  break;
    
    			case 4: {
    
    					  }
    					  break;
    
    			case 5: {
    
    					  }
    					  break;
    
    			case 0: {
    
    	//Programmende
    
    				s=1;
    				break;
    					  }
    
    	//Setzen des Defaultwertes um Fehleingaben in der Menüsteuerung abzufangen
    			default: {s=0;
    					 }
    
    			}
    		}
    		return 0;
    	}
    
    	void EMPLOYEE::SearchEmployee(EMPLOYEE arrayEmployee[]) {
    
    		int i=0;
    		string eing;
    
    		cout    << "Bitte geben Sie die Personalnummer oder den Nachnamen des Mitarbeiter eins."<< endl;
    
    		 cin>>eing;
    		for (i=0; i<=m; i++) {
    
    			if (arrayEmployee[i].ShowName().compare(eing)) {
    
    				arrayEmployee[i].ShowEmployee();
    			}
    			else {
    
    				cout    << "Mitarbeiter nicht gefunden. Ueberpruefen Sie die Schreibweise."<<endl;
    			}
    		}
    	}
    
    	class JOURNEY   {
    
    	protected:    //Deklaration der privaten Attribut
    	int days_yourney_last;
    	float hours_yourney_last;
    	float money_spend_total;
    	float money_spend_hotel;
    	float money_spend_entrance_fee;
    	float money_spend_gas;
    	float money_spend_expenses;
    	float money_spend_miscellaneous;
    
    	public:
    	void InsertJourneyData (void);
    	void CheckJourney (void);
    	void CalculateJourney (void);
    	void CalculateTotal (void);
    
    	JOURNEY();          //Standardkonstruktor
    	//~JOURNEY();         //Destruktor
    	};
    


  • Du bekommst also Fehler, nennen willst du sie aber nicht?

    Eine Funktion, die Werte erwartet, ruft man am Besten auch mit diesen Werten auf.

    In der Funktionsdeklaration und der Definition sollte die Parameterlist gleich aussehen. Bei dir ist es mal ein Array, mal ein Pointer.

    Du weißt wohl garnicht was du überhaupt machen willst. Einerseits gibt es einen next_one-Pointer (Liste), andererseits stcken deine Angestellten in einem Array.



  • Sorry und Danke schonmal für die schnelle Antwort. Die Angabe hab ich im Eifer des Gefechts ganz vergessen. Hier nun die Fehler:

    In function 'int main()':
    Line 165: error: expected primary-expression before '*' token
    compilation terminated due to -Wfatal-errors.
    

    Der Zeiger war noch ein Relikt eines vorherigen Versuches den Speicher dynamisch zu gestalten.



  • Ich fürchte, Du wurdest gewolft. Alte C++-Informationquelle bitte schnell verbrennen und gutes Buch holen.



  • Hierbei handelt es sich leider um einen Onlinekurs der vhb (Virtuelle Hochschule Bayern)



  • Was genau denkst Du denn, dass du mit dem Aufruf in Zeile 165 machst?



  • linux_heaven schrieb:

    Sorry und Danke schonmal für die schnelle Antwort. Die Angabe hab ich im Eifer des Gefechts ganz vergessen. Hier nun die Fehler:

    In function 'int main()':
    Line 165: error: expected primary-expression before '*' token
    compilation terminated due to -Wfatal-errors.
    

    manni66 schrieb:

    Eine Funktion, die Werte erwartet, ruft man am Besten auch mit diesen Werten auf.



  • Erklär mich jetzt bitte nicht für dumm, aber ich habe momentan noch meine Probleme bei den Klasse/Objekten. Wie müsste ich denn in diesem Fall die Daten der Klasse weitergeben? Ich denke da liegt momentan mein Problem.

    Merci



  • Deine Probleme fangen schon viel früher an, nämlich bei Zeigern. Ich würde dir raten: "Zurück zum Start!"



  • War das Programmgerüst vorgegeben, und wenn ja, was genau war vorgegeben? Oder ist das komplett von dir?

    Was den gegenwärtigen Fehler angeht: Der ist nicht dein Problem, sondern nur ein Teil eines größeren Problems.



  • linux_heaven schrieb:

    Erklär mich jetzt bitte nicht für dumm, aber ich habe momentan noch meine Probleme bei den Klasse/Objekten. Wie müsste ich denn in diesem Fall die Daten der Klasse weitergeben? Ich denke da liegt momentan mein Problem.

    Klassen sind nur Vorlagen, die beschreiben, wie Objekte aussehen sollen. Man kann alo nicht die Daten einer Klasse übergeben, sondern nur die eines Objekts. Dummerweise hast du keines. Deine Funktion CreateEmployee erzeugt zwar welche, die liegen aber unerreichbar irgendwo auf dem Heap. Und im Array sind nur "leere" Employees vorhanden.

    Keine Ahnung ob dieser Kurs brauchbar ist. Du solltest entweder noch mal vorne anfangen oder dir ein anstandiges Buch kaufen (Suchfunktion benutzen).



  • Der gesamte Code ist von mir erstellt. Dann muss ich mich nochmal bei den Zeigern einlesen und auch definitiv noch die Klassendeklaration.

    Danke schon mal.



  • manni66 schrieb:

    Man kann alo nicht die Daten einer Klasse übergeben, sondern nur die eines Objekts.

    static?



  • staticThing schrieb:

    manni66 schrieb:

    Man kann alo nicht die Daten einer Klasse übergeben, sondern nur die eines Objekts.

    static?

    Die kannst du als "Klasse" übergeben?
    Solchen "intelligenten" Einwürfe sind sicher hilfreich, wenn jemand völlig verwirrt ist.


Anmelden zum Antworten