Funktionen und Zeiger



  • Wundert mich eigentlich, dass du da keinen Compiler-Fehler kriegst:

    1. gibt es kein main (), sondern wenn dan int main (void), und noch ein anderes mit Kommandozeilenparametern

    2. deklarierst du nirgendwo "FListeneinkaufspreis", das du dann aber in "funktion1" auf einmal mit cin >> FListeneinkaufspreis; einliest

    3. deklarierst du einfach in main eine funktion funktion 1 mit dem RÜckgabewert void und einem Zeiger auf double als Parameter und rufst nicht funktion1 auf

    4. gibst du mit cout << ZListeneinkaufspreis; eine adresse und keinen double wert aus

    Viel GLück noch

    Felix



  • Servus Hohen99
    So wie du den Code gepostet hast, müsste dein Compiler aber Fehler ausspucken (z.B.: wo wird FListenEinkaufspreis definiert?).
    Ausserdem verstehe ich den Sinn deines Programms nicht so ganz.
    Aber zu deinem Problem mit den Zeigern. Du weist immer nur der Adresse des Zeigers etwas zu. Um einen Wert in einem Zeiger zu speichern, schreibst du *****zeiger_variable = zuzuweisender_wert.

    Dieses Programm verdeutlicht dies vielleicht:
    Es werden die übergegebenen Werte vertauscht:

    #include <iostream>
    
    void swap(double* arg1, double* arg2)
    {
            double temp = *arg1;
            *arg1 = *arg2;
            *arg2 = temp;
    }
    
    int main()
    {
            std::cout << "\nBitte zwei Werte eingeben:\n";
            double w1, w2;
            std::cout << "Wert 1: ";
            std::cin >> w1;
            std::cout << "Wert 2: ";
            std::cin >> w2;
            std::cout << "\nWerte werden vertauscht.\n\n";
            swap(&w1, &w2);
            std::cout << "Wert1: " << w1 << std::endl;
            std::cout << "Wert2: " << w2 << std::endl;
    
            return 0;
    }
    

    Oft, sind aber Referenzen besser geeignet (in deinem Beispiel z.B.) (und einfacher zu handhaben!).

    //edit: Zu spät...

    Caipi



  • lol, ich werd langsam auf meine alten tage 😉



  • Ok ich versuche mein Problem mal näher zu beschreiben.
    Am besten ich gebe euch mal mein code.

    #include <iostream>
    #include "KalkFunktionen.h"
    
    using namespace std;
    
    void main()
    {
    	int wahl = 0 ;
    
    	double Listeneinkaufspreis=1;
    
    	//Zeiger
    	double *ZListeneinkaufspreis = &Listeneinkaufspreis;
    
    	//Haupt menu
    
    	do
    	{
    	cout << "H A U P T M E N U E" << endl;
    	cout << "-------------------" << endl;
        cout << "1. Erfassung des Einkaufspreises" << endl;
    	cout << "2. Aendern der Lieferbedingungen" << endl;
    	cout << "3. Aendern der Kalkulationsdaten" << endl;
    	cout << endl;
    	cout << "4. Kalkulation durchfuehren" << endl;
    	cout << endl;
    	cout << "5. Programm beenden!" << endl;
    	cin >> wahl;
    
    	switch(wahl)
    	{
    	case 1:
    		void funktion1();
    		cout << Listeneinkaufspreis;
    		system ("pause");
    
    	break;
    
    		case 2:
    
    		break;
    
    			case 3:
    
    			break;
    
    				case 4:
    
    				break;
    
    					case 5:
    
    					break;
    
    	default:
    		cout << "Falsche Auswahl Bitte nochmal!" << endl;
    
    		for(int i=0; i < 300000000; i++)
    		{}
    		system ("cls");
    
    	}//end switch1 Hauptmenue
    	}while (wahl != 5);  //ende do hauptmenue
    
    }
    

    hier die funkionen:

    using namespace std;
    double FListeneinkaufspreis;
    
    void funktion1()
    {
    	system("cls");
    	cout << "Einkaufspreis: " << endl;
    	cin >> FListeneinkaufspreis;
    	*ZListeneinkaufspreis= FListeneinkaufspreis;
    }
    

    So ich hoffe ich kann damit helfen zu erklären was ich will.



  • Ich denk mal das er die funktion1 gernicht aufruft! Weiss aber nicht warum.



  • Also.... ich weiß garnicht, wo ich anfangen soll.
    1. void main() durch int main() ersetzen.
    2. double *ZListeneinkaufspreis ist in main() definiert. Kann deswegen nicht einfach so in funkction1() aufgerufen werden. (Wenn, dann den Zeiger als Argument der Funktion function1() übergen).

    3. ... beheb das erstmal..., dann sehen wir weiter 🙂

    Caipi



  • @Caipi

    Ok int main() habe ich gemacht Warum muss man das eigentlich machen ?

    so hier ein auszug wie ich versuche *ZListeneinkaufspreis der funktion1 zu übergeben! ➡ also es kommt kein fehler habe aber den eindruck die funktion wird nicht aufgerufen habe es mit den debuger getester er geht da garnicht rein.

    Kannst du mir mal ein bsp schreiben wie man das mit den zeigern und den funktionen macht. Danke!



  • @Caipi

    Ok int main() habe ich gemacht Warum muss man das eigentlich machen ?

    so hier ein auszug wie ich versuche *ZListeneinkaufspreis der funktion1 zu übergeben! ➡ also es kommt kein fehler habe aber den eindruck die funktion wird nicht aufgerufen habe es mit den debuger getester er geht da garnicht rein.

    Kannst du mir mal ein bsp schreiben wie man das mit den zeigern und den funktionen macht. Danke!



  • @Hohen99
    So funktioniert dein Programm (Ich habe aber NUR diesen Fehler ausgemerzt, den Rest spare ich mir jetzt, da ich im Moment leider zu faul bin 🙂 )
    (Es steht hier alles in einer Quelldatei.)

    #include <iostream>
    using namespace std;
    
    void funktion1(double* z);
    
    int main() // void main() ist KEIN STANDARD. Stattdessen int main().
    {
    	int wahl = 0 ;
    
    	double Listeneinkaufspreis=1;
    
    	//Zeiger
    	double *ZListeneinkaufspreis = &Listeneinkaufspreis;
    
    	//Haupt menu
    
    	do
    	{
    	cout << "H A U P T M E N U E" << endl;
    	cout << "-------------------" << endl;
        cout << "1. Erfassung des Einkaufspreises" << endl;
    	cout << "2. Aendern der Lieferbedingungen" << endl;
    	cout << "3. Aendern der Kalkulationsdaten" << endl;
    	cout << endl;
    	cout << "4. Kalkulation durchfuehren" << endl;
    	cout << endl;
    	cout << "5. Programm beenden!" << endl;
    	cin >> wahl;
    
    	switch(wahl)
    	{
    	case 1:
    		funktion1(ZListeneinkaufspreis);  // Hier muss das void WEG! 
    		cout << Listeneinkaufspreis;
    		system ("pause");
    
    	break;
    
    		case 2:
    
    		break;
    
    			case 3:
    
    			break;
    
    				case 4:
    
    				break;
    
    					case 5:
    
    					break;
    
    	default:
    		cout << "Falsche Auswahl Bitte nochmal!" << endl;
    
    		for(int i=0; i < 300000000; i++)
    		{}
    		system ("cls");
    
    	}//end switch1 Hauptmenue
    	}while (wahl != 5);  //ende do hauptmenue
    
            return 0;
    }
    
    double FListeneinkaufspreis;
    
    void funktion1(double* z)
    {
        system("cls");
        cout << "Einkaufspreis: " << endl;
        cin >> FListeneinkaufspreis;
        *z = FListeneinkaufspreis;
    }
    

    Caipi



  • Danke das funzt!


Anmelden zum Antworten