'zahl' declared as reference but not initializied



  • Danke dir bis hierhin!
    Bekomm es aber noch nicht hin statt der 6 eine andere Zahl die ich eingeben kann da ausrechnen zu lassen



  • Gast192 schrieb:

    Danke dir bis hierhin!
    Bekomm es aber noch nicht hin statt der 6 eine andere Zahl die ich eingeben kann da ausrechnen zu lassen

    Bin mir nicht ganz sicher was du meinst. Zeig mal den Code, den du bis jetzt hast.



  • #include <iostream> 
    #include <cstdlib> 
    using namespace std; 
    
    void eingabe(double & zahl); 
    
    int main(int argc, char **argv) 
    { 
        double input; 
        eingabe(input); 
        cout << input << endl;
        //*1 evtl hier die zweite Eingabe machen
    } 
    
    void eingabe(double & zahl) 
    { 
        cin >> zahl; // Hier wird die Eingabe gelesen und in z gespeichert 
        zahl *= 6; //*1 und hier statt mit der 6 mit der eingegebenen Zahl multiplizieren
    }
    


  • Die Frage ist nun, woher die zusätzliche Zahl kommt.

    Du kannst sie an die Funktion übergeben, dann sieht die Funktion so aus:

    void eingabe(double & zahl, double zahl_2) 
    { 
        cin >> zahl; // Hier wird die Eingabe gelesen und in z gespeichert 
        zahl *= zahl_2; //*1 und hier statt mit der 6 mit der eingegebenen Zahl multiplizieren
    }
    

    Du kannst aber auch die Zahl in der Funktion selber einlesen:

    void eingabe(double & zahl) 
    { 
    	double zahl_2;
    	cin >> zahl_2;
        cin >> zahl; // Hier wird die Eingabe gelesen und in z gespeichert 
        zahl *= zahl_2; //*1 und hier statt mit der 6 mit der eingegebenen Zahl multiplizieren
    }
    

    Kannst dir eine der beiden Versionen aussuchen.



  • Auch danke hierfür :p

    bisher kann ich nur 3 Zahlen eingeben. Wenn ich die Funktion am Schluss ändere und vervielfache, werden nur die letzten beiden Zahlen multipliziert. Wie kann ich also z. B. statt nur 2 Zahlen einzugeben 3 Zahlen eingeben?



  • nur *2 Zahlen eingeben



  • Gegenfrage: Was genau hast du eigentlich vor?

    Wenn du mehrere Zahlen nach einem festgelegten Muster einlesen und verarbeiten willst, dann kannst du deine Funktion schreiben, daß sie genau das erledigt. Ansonsten könntest du es auch mit Schleifen und/oder Arrays probieren.



  • Ich denke mal ich will einen Zeiger für Arrays wäre da besser, damit ich nicht jeden Wert deklarieren muss, oder?



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ (auch C++0x) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Gast192 schrieb:

    Ich denke mal ich will einen Zeiger für Arrays wäre da besser, damit ich nicht jeden Wert deklarieren muss, oder?

    In deinem ersten posting dieses threads steht, dass du 6 Zahlen eingeben und dann den Durchschnittswert berechnen möchtest.
    Wie du eine Zahl einliest weisst du ja mitlerweile.
    Nun musst du dir doch nur noch überlegen wie du 6 Zahlen einliest (Stichwort: schleife).

    Den Durchschnitt zu berechnen sollte dann doch kein Problem mehr sein oder?

    Welches Problem hast du nun bei der Umsetzung?



  • #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    void eingabe(double & zahl);
    
    int main(int argc, char **argv) {
    	for (int lauf = 0; lauf <= 6; lauf++) {
    		double input;
    		eingabe(input);
    		cout << input << endl;
    	}
    	while (input >= 1 || input <= 49)
    		;
    }
    
    void eingabe(double & zahl) {
    	double zahl[4];
    	cin >> zahl[4];
    	cin >> zahl; // Hier wird die Eingabe gelesen und in z gespeichert
    }
    

    Das ist mein bisheriger Code. Nur zeigt er mir wieder Fehlermeldungen:
    line 13: 'input' was not declared in this scope
    line 18: declaration of 'double zahl[4]' shadows a parameter
    line 20: no match for 'opderator>>'std::cin>>zahl'

    Wie ihr sehen könnt habe ich ebenfalls ein Zahlenbereich gesetzt, welchen ich gern beibehalten würde



  • line 13: 'input' was not declared in this scope
    Schau dir mal das hier an:

    for (int lauf = 0; lauf <= 6; lauf++) {
    		double input;
    		eingabe(input);
    		cout << input << endl;
    	}
    	while (input >= 1 || input <= 49)
    		;
    

    Hier wird in der Schleife die Variable input definiert, die nach der Schleife nicht mehr existiert, und daher kann auch nicht drauf zugegriffen werden.

    line 18: declaration of 'double zahl[4]' shadows a parameter

    void eingabe(double & zahl) { //(1)
        double zahl[4];   //(2)
        cin >> zahl[4];   //(3)
        cin >> zahl; //(4)
    }
    

    Hier definierst du an Stelle (2) ein double-Array mit Namen "zahl". Das ist eine andere Variable als der Parameter "zahl", den du an (1) definiert hast. Der ist deshalb nicht mehr sichtbar in der Funktion.
    Was du an (3) machst ist sicher nicht das, was du glaubst zu tun (wobei ich mir nicht sicher bin was du überhaupt glaubst zu tun): hier wird die Zahl an der 5ten Stelle des Arrays eingelesen. Dummerweise hat dein Array nur 4 Elemente, daher erzeugt das hier undefiniertes Verhalten.
    An (4) meckert der Compiler, weil du nicht in die Referenz aus (1) einliest, sondern in einen Pointer auf das Array, das du in (2) defniiert hast. (Die Definition von (1) ist ja versteckt worden). Und um einen Pointer auf double einzulesen gibts keinen passenden operator>>, daher die Fehlermeldung.

    Ich würde dir dringend raten, nochmal gründlich die ersten Kapitel im C++-Buch deiner Wahl durchzuarbeiten, es scheint als hättest du da einige Grundlagen noch nicht ganz verinnerlicht.


Anmelden zum Antworten