Wert aus Funktion in vorhergehender Funktion verwenden?



  • Hallo zusammen,

    ich befürchte, dass es keine Lösung für das Problem gibt, wie ich Sie gerne hätte. Aber ich würde mich gern eines besseren belehren lassen.

    Und zwar möchte ich einen Wert der in der Mainfunktion definiert wird in einer Funktion für eine switch-case Anweisung verwenden. Die Wert wird in der Mainfunktion definiert, bevor die Funktion mit der switch-case Anweisung in der Mainfunktion aufgerufen wird.

    Das Konstrukt sieht in etwa wie folgt aus.

    Headerdatei Form.h

    ...
    // Landschaftsformen.
    enum FormT {RandomKreiseF=0, RandomRechteckeF=1, RandomSterneF=2};
    
    .....
    
    typedef struct
    {
       ...
        FormT form;   //Landschaftsformen
       ...
    } SimConfigT;
    
    ...
    }
    

    Maindatei main.cpp

    ...
    void Funkt1
    {
       ...
    switch(/*die Landschaftsform*/)
    {
    
    case RandomKreiseF: Anweisung1;
    case RandomRechteckeF: Anweisung2;
    case RandomSterneF: Anweisung3;
    
    }
    
    int main()
    {
    	// Neue Konfiguration für Simulation anlegen
    	SimConfigT cfg;
    
       ...
    
    	/*---------------------------------------------------------*/
    	/* Form der Landschaft einstellen durch auskommentieren.   */
    	/*---------------------------------------------------------*/
    
    	cfg.landschaft = RandomKreiseF;
    	//cfg.landschaft = RandomRechteckeF;
    	//cfg.landschaft = RandomSterneF;
    
       ...
    }
    

    Danke im Voraus für jeden Tipp bzw. Denkanstoss meine Idee zu realisieren. 🙂 👍



  • Was hindert Dich daran, die Variable cfg in main Deiner Funktion Funktl als Parameter zu übergeben?

    mfg Martin



  • #include <iostream>
    
    enum class Test { foo, bar };
    
    void func(Test test)
    {
        switch(test)
        {
        case Test::foo :
            std::cout << "foo\n";
            break;
        case Test::bar :
            std::cout << "bar\n";
            break;
        default :
            std::cout << "ups\n";
        }
    }
    
    int main()
    {
        Test test = Test::foo;
    
        func(test);
    }
    


  • mgaeckler schrieb:

    Was hindert Dich daran, die Variable cfg in main Deiner Funktion Funktl als Parameter zu übergeben?

    mfg Martin

    Das ganze ist eine Aufgabe mit einem vorgegebenen Konstrukt, laut der Vorgabe darf ich nur in der Funkt1 mein script implementieren. 😕



  • mgaeckler schrieb:

    Was hindert Dich daran, die Variable cfg in main Deiner Funktion Funktl als Parameter zu übergeben?

    Vermutlich dass er nicht weiss dass es sowas wie Parameter überhaupt gibt.

    @Stars_nStripes
    Das Forum ist nicht der geeignete Platz sich die Grundlagen einer Programmiersprache "zu erfragen".
    Dafür gibt es z.B. Bücher, bzw. auch das eine oder andere Tutorial im Internet.



  • Stars_nStripes schrieb:

    Das ganze ist eine Aufgabe mit einem vorgegebenen Konstrukt, laut der Vorgabe darf ich nur in der Funkt1 mein script implementieren. 😕

    Das wäre ja genau das was dir vorgeschlagen wurde. Übergib die Variable als Parameter. Dir dürfte evtl aufgefallens eind as Funktl1 noch keine Parameterliste besitzt.

    Wer hat dir diese Aufgabe eigentlich gegeben? Dieses typedef struct sieht so nach C aus (bitte korrigieren falls ich da falsch liege).



  • hustbaer schrieb:

    mgaeckler schrieb:

    Was hindert Dich daran, die Variable cfg in main Deiner Funktion Funktl als Parameter zu übergeben?

    Vermutlich dass er nicht weiss dass es sowas wie Parameter überhaupt gibt.

    @Stars_nStripes
    Das Forum ist nicht der geeignete Platz sich die Grundlagen einer Programmiersprache "zu erfragen".
    Dafür gibt es z.B. Bücher, bzw. auch das eine oder andere Tutorial im Internet.

    Doch, doch die Grundlagen sind mir bekannt auch die Parameterübergabe, ohne zu behaupten ich wäre gut in dem was ich programmiere, aber was ich vergessen habe in meinem Code zu erwähnen ist folgender Punkt:

    Headerdatei Form.h

    // Funktionspointer für Roboter Main-Funktion (void/void-Funktion).
    typedef void (*RoboterMainFuncPtrT)();
    
    typedef struct
    {
       ...
        FormT form;   //Landschaftsformen
        RoboterMainFuncPtrT roboterMain;      // Roboter Steuerfunktion (void/void-Funktion).
    
       ...
    } SimConfigT;
    
    ...
    }
    

    **
    Mainfunktion main.cpp**

    ...
    cfg.landschaft = RandomKreiseF;
        //cfg.landschaft = RandomRechteckeF;
        //cfg.landschaft = RandomSterneF;
    ...
    cfg.robiMain = RobiMain;
    ...
    }
    

    Sprich ich kann der Funktion vom Typ RoboterMainFunctPtrT den Parameter nicht übergeben vom Typ void.



  • Xebov schrieb:

    Stars_nStripes schrieb:

    Das ganze ist eine Aufgabe mit einem vorgegebenen Konstrukt, laut der Vorgabe darf ich nur in der Funkt1 mein script implementieren. 😕

    Das wäre ja genau das was dir vorgeschlagen wurde. Übergib die Variable als Parameter. Dir dürfte evtl aufgefallens eind as Funktl1 noch keine Parameterliste besitzt.

    Wer hat dir diese Aufgabe eigentlich gegeben? Dieses typedef struct sieht so nach C aus (bitte korrigieren falls ich da falsch liege).

    Es ist eine Aufgabe von meinem Professor (Fachhochschule 2. Semester).

    Bin mit C nicht vertraut daher kann ich die Frage leider nicht beantworten.



  • Wenn dir schon auffällt das du was vergessen hast, dann poste das ganze doch einmal vollständig rein. Keiner wird dir wirklich helfen können wenn hier nur einzellne Flicken sind.



  • Die Antwort auf deine Frage lautet: geht nicht.

    typedef struct gehört nicht in ein C++ Programm. Versuchst du ein C-API mit entsprechender C Dokumentation in ein C++ Programm einzubauen?

    Hast du dir diese struct ausgedacht?



  • @Stars_nStripes
    Ich denke es wäre wirklich das beste wenn du die Aufgabe vollständig postest.



  • Stars_nStripes schrieb:

    Hallo zusammen,

    ich befürchte, dass es keine Lösung für das Problem gibt, wie ich Sie gerne hätte. Aber ich würde mich gern eines besseren belehren lassen.

    Und zwar möchte ich einen Wert der in der Mainfunktion definiert wird in einer Funktion für eine switch-case Anweisung verwenden. Die Wert wird in der Mainfunktion definiert, bevor die Funktion mit der switch-case Anweisung in der Mainfunktion aufgerufen wird.

    Das Konstrukt sieht in etwa wie folgt aus.

    Headerdatei Form.h

    ...
    // Landschaftsformen.
    enum FormT {RandomKreiseF=0, RandomRechteckeF=1, RandomSterneF=2};
    
    ...
    // Funktionspointer für Robi Tobi's Main-Funktion (void/void-Funktion).
    typedef void (*RobiMainFuncPtrT)();
    
    typedef struct
    {
       ...
        FormT form;   //Landschaftsformen
        RoboterMainFuncPtrT roboterMain;      // Roboter Steuerfunktion (void/void-Funktion).
        ...
    } SimConfigT;
    
    ...
    }
    

    Maindatei main.cpp

    ...
    void Funkt1
    {
       ...
    switch(/*die Landschaftsform*/)
    {
    
    case RandomKreiseF: Anweisung1;
    case RandomRechteckeF: Anweisung2;
    case RandomSterneF: Anweisung3;
    
    }
    
    int main()
    {
    	// Neue Konfiguration für Simulation anlegen
    	SimConfigT cfg;
    
       ...
    
    	/*---------------------------------------------------------*/
    	/* Form der Landschaft einstellen durch auskommentieren.   */
    	/*---------------------------------------------------------*/
    	
    	cfg.landschaft = RandomKreiseF;
    	//cfg.landschaft = RandomRechteckeF;
    	//cfg.landschaft = RandomSterneF;
    
      ...
           cfg.robiMain = RobiMain;
    
       ...
    }
    

    Danke im Voraus für jeden Tipp bzw. Denkanstoss meine Idee zu realisieren. 🙂 👍

    Danke bisher für die Unterstützung, hier im Zitierten noch einmal das vollständige Problem, mit dem Zusatz dass ich keinen Paramter an die void Funktion übergeben kann, da ich diesen an die Funktion vom Typ RoboterMainFuncPtrT übergeben müsste.
    auftretender Fehler: void ≠ RoboterMainFuncPtrT



  • Die Antwort hat du. Entweder du lieferst neue Informationen oder du lebst damit.



  • Ja gerade hat es klick gemacht, es gibt eine Alternative mein Problem zu lösen.
    Danke an alle!


Log in to reply