Pointer von Funktion zur nächsten Funktion übergeben.



  • Hallo zusammen

    Gestern habe ich die Pointer und Referenzen kennengelernt und wollte diese mit einer kleinen Übung festigen, nun bin ich auf ein Problem gestossen zudem ich keine Lösung im Buch gefunden habe das Internet hat mich auch nicht weitergeholfen, weil ich immer nur Erklärungen zur einfachen übergabe an eine Funktion gefunde habe.

    Ich habe eine Funktion(41) in einer Funktion(53) und will eine Variable(18) vom main zur Funktion(41) übergeben und von dort weiter zur nächsten Funktion(53) in dieser Funktion(41) befindet.

    Gruss Thomas

    #include <iostream>
    
    using namespace std;
    
    struct S_mitarbeiter{
    	int jahre;
    	bool arbeit;
    };
    
    void eingabe(S_mitarbeiter &temparbeiter);
    void auswertung(const S_mitarbeiter &temparbeiter,int *pAktien);
    void ausgabe(const S_mitarbeiter &temparbeiter, const int *pAktien);
    void checkaktien(int *pAktien);
    
    int main(){
    	S_mitarbeiter arbeiter;
    	arbeiter.arbeit=false;
    	int aktien;
    	int loop=0;
    	while(loop==0){
    		eingabe (arbeiter);
    		auswertung(arbeiter, &aktien);
    		ausgabe(arbeiter, &aktien);
    	}
    	return 0;
    }
    
    void eingabe(S_mitarbeiter &temparbeiter){
    	int auswahl;
    	cout<<"\n Bitte Dienstjahre eingeben: ";
    	cin>>temparbeiter.jahre;
    	cout<<"\n Bereits gekündigt? Ja (j oder J) oder Nein (n oder N): ";
    	switch(auswahl){
    		case 'j':case 'J': temparbeiter.arbeit=true; break;
    		case 'n':case 'N': break;
    		default: "\n Ungueltige Eingabe";
    	}
    
    }
    
    void auswertung(S_mitarbeiter &temparbeiter, int *pAktien){
    	if(temparbeiter.arbeit!=true){
    		void checkaktien(&pAktien);
    	}else{
    		cout<<"\n\n Ihnen ist es nicht erlaubt Aktien zu kaufen!";
    	}
    }
    
    void ausgabe(const S_mitarbeiter &temparbeiter, const int *pAktien){
    	cout<<"\n\n Sie dürfen "<<*pAktien<<" kaufen.";
    }
    
    void checkaktien(int *pAktien){
    	if(*pAktien>10){
    		*pAktien=20;
    		if(*pAktien>2){
    			*pAktien=10;
    		}else{
    			*pAktien=0;
    		}
    	}
    }
    


  • void auswertung(S_mitarbeiter &temparbeiter, int *pAktien){
        if(temparbeiter.arbeit!=true){
            void checkaktien(pAktien);  // pAktien ist doch schon vom Typ int*
                                        // wenn du da noch einmal den Address-Operator
                                        // verwendest, würdest du die Addresse 
                                        // des Zeigers weitergeben und nicht die 
                                        // Addresse auf die der Zeiger pAktien zeigt
        }else{
            cout<<"\n\n Ihnen ist es nicht erlaubt Aktien zu kaufen!";
        }
    }
    


  • Das void in Zeile 43 ist ebenfalls falsch.



  • manni66 schrieb:

    Das void in Zeile 43 ist ebenfalls falsch.

    Zeiger schrieb:

    void auswertung(S_mitarbeiter &temparbeiter, int *pAktien){
        if(temparbeiter.arbeit!=true){
            void checkaktien(pAktien);  // pAktien ist doch schon vom Typ int*
                                        // wenn du da noch einmal den Address-Operator
                                        // verwendest, würdest du die Addresse 
                                        // des Zeigers weitergeben und nicht die 
                                        // Addresse auf die der Zeiger pAktien zeigt
        }else{
            cout<<"\n\n Ihnen ist es nicht erlaubt Aktien zu kaufen!";
        }
    }
    

    Danke für die Rückmeldung. Ich habe die beiden Fehler korrigiert und wollte das ganze kompilieren und bekommen einen Fehler an den Kopf geschmissen.

    22 C:\Users\Thomas\Desktop\C_Programm\C++\uebung_mitarbeiterbonus.cpp undefined reference to `auswertung(S_mitarbeiter const&, int*)'

    Gruss Thomas



  • void auswertung(const S_mitarbeiter &temparbeiter,int *pAktien);
    ...
    void auswertung(S_mitarbeiter &temparbeiter, int *pAktien){
    

    Fällt dir ein Unterschied auf?



  • manni66 schrieb:

    void auswertung(const S_mitarbeiter &temparbeiter,int *pAktien);
    ...
    void auswertung(S_mitarbeiter &temparbeiter, int *pAktien){
    

    Fällt dir ein Unterschied auf?

    *Faceplam* aua... Ja gesehen Danke 🙂



  • BlackNeon schrieb:

    if(*pAktien>10){
    		*pAktien=20;
    		if(*pAktien>2){
    			*pAktien=10;
    		}else{
    			*pAktien=0;
    		}
    	}
    

    Bin nicht sicher, ob das tut, was du willst...


Log in to reply