Eine Struct für mehrere Funktionen



  • Hallo Leute,

    *Hintergrund:
    Schulprojekt Nettobedarfssystem (kleiner Shop mit automatisierter Bestellung usw.)
    Artikel, Kunden und Bestelldaten werden aus TXTs gelesen und auch darin gespeichert
    Das System hat eine Art virtuellen Warenkorb in welchem die Artikel ID + die zugehörige Anzahl gespeichert wird.
    Status: Newbie
    *

    Aufbau Menü "Kundenbestellung aufnehmen" kann folgende Funktionen aufrufen:
    - Kunde auswählen
    - Artikel hinzufügen
    - Bestellung einsehen und korrigiern
    - Bestellung abschließen

    Bin jetzt soweit das ich in dem Menü "Kundenbestellung aufnehmen" einen Array auf die Struktur "vwk_produkte" angelegt habe und diesen möchte ich dann an die einzelnen Unterfunktionen übergeben damit diese ihn verändern, auslesen usw. damit machen können.

    Das ganze hat auch bei zummindest nur einer Unterfunktion mit folgendem Code noch geklappt:

    Kundenbestellung_aufnehmen.cpp

    ..
        vwk_produkte warenkorb[100];
    ..
        case 2 :
            produkte_hinzufuegen(warenkorb, max_array); // 1.Funktion
            break;
        case 3 :
            einsehen_korrigieren(warenkorb, max_array); // 2.Funktion
            break;
    ..
    

    Produkt_hinufuegen.cpp

    void produkte_hinzufuegen(vwk_produkte warenkorb[], int max)
    {
    ..
        warenkorb[pos].pid=produktid;
        warenkorb[pos].anz=anzahl;
    ..
    

    Produkt_hinzufuegen.h

    //---------------------------------------------------------------------------
    
    #ifndef Produkte_hinzufuegenH
    #define Produkte_hinzufuegenH
    
    //---------------------------------------------------------------------------
    using namespace std;
    
    struct vwk_produkte{
    	int pid;
    	int anz;
    };
    
    void produkte_hinzufuegen(vwk_produkte[], int);
    #endif
    

    Doch als ich die Zweite Funktion einbinden wollte sagt er mir

    "Parameterdeklaration darf nicht mit 'vwk'produkte' beginnen"
    weil er das wohl nicht aus der "Produkte_hinzufuegen.h" benutzen kann.

    Alternatv hatte ich die Struct auch schon in einer Extra .h und hab diese in alle .ccp die darauf zugreifen müssen included aber dann hat er immer gemeckert das sie mehrfach zugewiesen oder deklariert ist.

    Jetzt weiß ich nicht so genau wo ich meine Struct Deklaration hinschreiben soll damit alle Unterfunktionen zugriff darauf haben.
    Wie man sieht steht sie momentan in der "Produkt_hinzufuegen.h" und das ist wohl nicht ganz richtig, habs auch schon an vielen anderen Stellen probiert aber irgendwie klappt das nicht.

    Hoffe mir kann jemand helfen.

    Falls die Quelltext auszüge nicht reichen, poste ich auch gerne den ganzen Code.

    Hoffe es hat jemand nen guten Tipp 🙂

    gruß merc



  • Entweder du packst alle nötigen Funktionen in den selben Header und setzt die struct-Definition davor - oder du packst die struct-Definition in einen eigenen Header, der von allen Funktionsheadern eingebunden wird.
    (die dritte Möglichkeit wäre es, die struct-Definition in einen Mini-Guard '#ifndef STRUCT/#define STRUCT/.../#endif' einzuschließen)

    (ich bevorzuge die erste Variante)



  • Vielen Dank für die Hilfe

    Habs jetzt auch nach der ersten Variante gemacht

    funktionen.h

    //---------------------------------------------------------------------------
    #ifndef ProduktverwaltungH
    #define ProduktverwaltungH
    #ifndef Produkt_SucheH
    #define Produkt_SucheH
    #ifndef LieferantenverwaltungH
    #define LieferantenverwaltungH
    #ifndef LagerverwaltungH
    #define LagerverwaltungH
    #ifndef KundenverwaltungH
    #define KundenverwaltungH
    #ifndef Kundenbestellung_aufnehmenH
    #define Kundenbestellung_aufnehmenH
    #ifndef Kunde_auswaehlenH
    #define Kunde_auswaehlenH
    #ifndef Einsehen_korrigierenH
    #define Einsehen_korrigierenH
    #ifndef BilanzH
    #define BilanzH
    #ifndef AbschliessenH
    #define AbschliessenH
    #ifndef Produkte_hinzufuegenH
    #define Produkte_hinzufuegenH
    //---------------------------------------------------------------------------
    using namespace std;
    
    struct vwk_produkte{
    	int pid;
    	int anz;
    };
    
    int produktverwaltung();
    int produkt_suche();
    void lieferantenverwaltung();
    void lagerverwaltung();
    void kundenverwaltung();
    void kundenbestellung_aufnehmen();
    void kunde_auswaehlen();
    void einsehen_korrigieren(vwk_produkte[], int);
    void bilanz();
    void abschliessen();
    void produkte_hinzufuegen(vwk_produkte[], int);
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    

    Hatte erst gemeckert als ich nur 1 #endif hatte aber das hab ich dann aus der Hilfe rausgelesen.
    Ich finde es sieht zwar etwas komisch aus, aber hauptsache es funktioniert

    THX



  • 😮 😃 sowas habe ich auch noch nicht gesehen. Und normalerweise reicht ein Include-Guard pro Header vollkommen aus.

    (PS: Und ein 'using namespace std;' in einem Header solltest du besser nicht verwenden - abgesehen davon verwendest du hier überhaupt nichts, was den Namensraum std:: benötigen würde)



  • CStoll schrieb:

    😮 😃 sowas habe ich auch noch nicht gesehen.

    ^^Ich = Noob 😞

    Ich hab eben einfach alle Header die ich zu den jeweiligen CPP Files hatte in einen einzigen zusammenkopiert und in jede CPP eingebunden. (War das nicht so gemeint? 😕 )

    Ich dachte diese "#ifndef ProduktverwaltungH" bzw. "#define ProduktverwaltungH" sorgen dafür das das Programm alle Funktionen kennt und jede CPP einbindet, da diese ja nicht z.B. in der Main stehen.

    PS. Das 'using namespace std; hab ich weggemacht, geht auch ohne. Hatte ich einfach aus irgendnem Bsp. rauskopiert 🙂

    gruß merc



  • merc schrieb:

    Ich dachte diese "#ifndef ProduktverwaltungH" bzw. "#define ProduktverwaltungH" sorgen dafür das das Programm alle Funktionen kennt und jede CPP einbindet, da diese ja nicht z.B. in der Main stehen.

    Nein, die Funktionen werden per #include bekannt gemacht - diese #ifndef-Konstruktion (im Fachausdruck "Include-Guard") stellt "nur" sicher, daß der Header nicht doppelt in einer Übersetzungseinheit eingebunden wird.



  • OK, danke für die Nachhilfe 🙂

    Ich lass es jetzt einfach mal so, da es ja funktioniert. Die Lehrerin wird schon meckern 😃

    Wenn ich nächste Woche wieder aus Schottland zurückkomme werd ich bestimmt nochmal hier auftauchen, hab nämlich jetzt schon noch nen paar Sachen die noch nicht so klappen wie ich möchte, sind aber eher feinheiten und deshalb nicht so wichtig.

    Nochmal THX 🙂


Anmelden zum Antworten