Matrix übergeben



  • Danke an allen!!
    Hat lange gedauert aber ich habe nun noch ein wenig damit experimentiert und nun ist es mir hoffentlich klar. 😃



  • So hier bin ich wieder 😃 😃
    Ich würde nun gerne eine Funktion in einer Funktion aufrufen.

    Funktionsprototypen

    void ausgabe_spielfeld(daten &spielfeld, daten &x, daten &auswertung);
    void x_berechnen(daten &x, daten &auswertung);
    

    Funktionen

    void ausgabe_spielfeld(daten &spielfeld, daten &x, daten &auswertung){
    //...
        x_berechnen(daten &x, daten &auswertung); //Hier die Fehlermeldung
    //...
    }
    
    void x_berechnen(daten &x, daten &auswertung){
        //...
    }
    

    Nun bekomme ich die Fehlermeldung (Stelle makiert):
    expected primary-expression befor & token

    [/code]


  • Mod

    Das Problem ist, dass du anscheinend vergessen hast, wie man überhaupt Funktionen aufruft.

    Hier mal ein Beispiel. In der Standardbibliothek ist der Sinus deklariert als:

    double sin(double x);
    

    Wie würdest du diese Funktion aufrufen?

    ~An all die Klugscheißer, die sich gerade die Finger wund tippen, dass da nur "double sin(double)" vorgegeben wäre: Falsch! Es wird auf den C-Standard verwiesen und der definiert "double sin(double x)". Bloß die Zusatzüberladungen im C++-Standard lassen den Parameter unbenannt. Ätsch! :p~



  • SeppJ schrieb:

    double sin(double x);
    

    Wie würdest du diese Funktion aufrufen?

    Ich würde sie so aufrufen

    sin(x)
    

    Aber x kann ja auch haus heißen.
    Also ich habe gestern abend noch mal überlegt und habe es geschafft unzwar so:

    x_berechnen(x, auswertung);
    

    , aber warum so?
    Weil in der Funktion

    void ausgabe_spielfeld(daten &spielfeld, daten &x, daten &auswertung)
    

    werden die Variablen x & auswertung so angesprochen x.x & auswertung.auswertung. Es wäre nett wenn mir das einer nochmal genauer erklären könnte.



  • Fensterscheibe schrieb:

    Ich würde sie so aufrufen

    sin(x)
    

    Aber x kann ja auch haus heißen.

    Völlig richtig.

    double sin(double x);
    void foo(){
    	double haus = 3.14;
    	double sh = sin(haus);
    	double x = 2.71;
    	double sh2 = sin(x);
    	double sh3 = sin(double haus); //syntax error
    	double sh4 = sin(double x); //syntax error
    }
    
    void bla(){
    	x_berechnen(daten &x, daten &auswertung); //syntax error
    	x_berechnen(x, auswertung);
    }
    

    Beim Funktionsaufruf werden die Typen der Argumente nicht nochmal hingeschrieben. Soweit klar? Dass manchmal Funktionsargumente genauso heißen wie in der Funktionsdeklaration hat nichts zu sagen.

    Fensterscheibe schrieb:

    Weil in der Funktion

    void ausgabe_spielfeld(daten &spielfeld, daten &x, daten &auswertung)
    

    werden die Variablen x & auswertung so angesprochen x.x & auswertung.auswertung. Es wäre nett wenn mir das einer nochmal genauer erklären könnte.

    Kommt drauf an wie daten definiert ist.

    struct daten{
    	int x;
    	int auswertung;
    };
    
    struct daten x;
    x.x;
    x.auswertung;
    struct daten auswertung;
    auswertung.x;
    auswertung.auswertung;
    struct daten sonstwas;
    sonstwas.x;
    sonstwas.auswertung;
    sonstwas.sonstwas; //error: struct daten hat kein member "sonstwas"
    

    Hier ist es wieder Zufall, dass die Variablen genauso heißen wie ihre Member. Kann so sein, muss nicht, hat nichts zu sagen.


Anmelden zum Antworten