Zeiger an Funktion in Funktion weitergeben



  • Hallo.

    Ich häng inzwischen seit einigen Stunden an ein und dem selben Problem fest.

    Ich hab eine Funktion, der ich den pointer auf das erste strukturelement mitgebe:

    first=neue_buchung(first);

    Das klappt auch alles, nun gebe ich in dieser Funktion einer weiteren Funktion diesen pointer:

    first=buchung_einzel(first, an_tag, an_monat, an_jahr, anzahldertage);

    Nun bringt er mir aber immer den Fehler, dass es hier Probleme mit der vorgenommenen Dereferenzierung gibt:

    error C2040: 'buchung_einzel': 'zimmer *(zimmer *,int,int,long,int)' unterscheidet sich von 'int ()' in Bezug auf die Anzahl vorgenommener Dereferenzierungen

    Wo könnte da jetzt mein Fehler liegen?
    Darf man in einer Funktion den Pointer nicht nocheinmal übergeben?

    Danke für die Hilfe!
    DonCor



  • doch darf man. wie sieht denn der funktionsprototyp für buchung_einzel() aus?



  • Wow, wenn das keine schnelle Antwort war 🙂

    meinst du das?

    struct zimmer* buchung_einzel(struct zimmer* first, int tag, int monat, long int jahr, int zimmer_tage)



  • puh. poste mal die ganze funktion 🙂



  • Nun, die ist ein wenig sehr lang 🙂

    Also da ich das Problem 3 Mal hab, bring ich mal die Stelle die den kürzeren Quelltext hat 🙂

    Also in der Funktion:
    struct zimmer* neue_buchung(struct zimmer* first)
    steht:

    first=neue_buchung2(first, an_tag, an_monat, an_jahr, anzahldertage, zimmer_art);
    

    folgende function wird also aufgerufen:

    struct zimmer* neue_buchung2(struct zimmer* first, int tag, int monat, long int jahr, int anzahltage, int zimmer_art)
    {
    // Einzelne Funktionen aufrufen
    	if (zimmer_art==1) {first=buchung_einzel(first, tag, monat, jahr, anzahltage);}
    	if (zimmer_art==2) {first=buchung_doppel(first, tag, monat, jahr, anzahltage);}
    	if (zimmer_art==3) {first=buchung_dreier(first, tag, monat, jahr, anzahltage);}
    // Return
    	return first;
    }
    

    Und da bringt es den Fehler auch:
    156 error C2040: 'neue_buchung2': 'zimmer *(zimmer *,int,int,long,int,int)' unterscheidet sich von 'int ()' in Bezug auf die Anzahl vorgenommener Dereferenzierungen 613



  • also ich weiß nicht. irgendeine der drei funktionen, die du da aufrufst
    hat einen falschen prototypen. in dem code kann ich erstmal so keinen
    fehler erkennen.

    dieser code hier funktioniert bei mir wunderbar:

    struct zimmer
    {
    	int test;
    };
    
    struct zimmer* buchung_einzel(struct zimmer* first)
    {
    	return first;
    }
    
    struct zimmer* neue_buchung2(struct zimmer* first)
    {
       first=buchung_einzel(first);
       return first;
    }
    
    int main(int argc, char argv[])
    {
    
    	struct zimmer first;	
    	struct zimmer* y;
    
    	y = neue_buchung2(&first);
    
    	return 0;
    }
    


  • Hm. Das funktioniert bei mir auch 😉

    Kann es vielleicht sein das ich da jetzt ein paar sternchen mehr beim übergeben vor first machen muss? so zeiger auf zeiger? Sonst fällt mir jetzt nix mehr ein 😞



  • Gut, hab die Sache eingegrenzt 🙂

    in meinem Main teht jetzt noch:

    main()
    {
    	struct zimmer *first = NULL;
    	first=eins(first);
    }
    

    Irgendwie muss das falsch sein, wenn ich das in einer Funktion an eine Weitere weitergebe, den bis jetzt hatte das so funktioniert, du hast da ja

    struct zimmer first;   
        struct zimmer* y;
    
        y = neue_buchung2(&first);
    

    stehen, aber &first, also die Adresse des ersten Strukts müsste doch das gleiche ausgeben wie der Wert des Zeigers, oder?



  • struct zimmer *first = NULL; 
    first=eins(first);
    

    was du hier machst, ist einen zeiger zu definieren, weist ihm aber keinen
    speicher zu. folgendes vielleicht hilfreich 🙂

    struct zimmer *first = NULL;
    
    first = malloc(sizeof(struct zimmer)); 
    first=eins(first);
    


  • mammamia;



  • mammamia;

    Hmmm. Der kann scheinbar ganz gut Kopfrechnen...


Anmelden zum Antworten