fehlerhafter Zugriff auf String-Vector[i]



  • Servus Progger,
    ich möchte gerne auf den Inhalt von "std::vectorstd::string kategorie" an der Stelle [i] mit printf oder cout zugreifen. Leider erhalte ich immer eine Felhermeldung an dieser Stelle:

    printf("in Kategorie: %s %2.2lf \n", kategorie.at(i) , kategoriebetrag[i]);
    

    Fehlermeldung: 191 [Warning] cannot pass objects of non-POD type `struct std::basic_string<char, std::char_traits<char>, std::allocator<char> >' through `...'; call will abort at runtime

    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <vector>
    
    // Ausgaben als Datenstruktur
    struct Ausgaben 
    { 
        std::string kategorie; 
        std::string monat; 
        int nummer; 
        double betrag;
        double monatsbetrag;
    }; 
    double monatsbetrag[12];
    double kategoriebetrag[8];
    int monate[13]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    std::vector<std::string> kategorie;
    // Grundgerüst
    class AusgabenListe
    {
    
    	// Definition eines Listenelements 
    	class Listenelement 
    	{ 
    	public:
    		// Konstruktor
    		Listenelement(Ausgaben ausgaben)
    		{
    			this->ausgaben.nummer = ausgaben.nummer;
    			this->ausgaben.monat = ausgaben.monat;
    			this->ausgaben.kategorie = ausgaben.kategorie;
    			this->ausgaben.betrag = ausgaben.betrag;
    			this->ausgaben.monatsbetrag = ausgaben.monatsbetrag;
    			this->nachfolger = NULL;
    		}
    
        	// Das sind die Daten die wir verwalten wollen ( Datenbereich) 
        	Ausgaben ausgaben;
    
        	// Zeiger auf den Nachfolger ( Zeiger) 
        	Listenelement *nachfolger; 
    	};
    
    	// Listenkopf
    	Listenelement* kopf;
    
    	// Listenende
    	Listenelement* ende;
    
    public:
    
    	// Konstruktor
    	AusgabenListe(void)
    	{
    		kopf = ende = NULL;
    	}
    
    	// Destruktor
    	~AusgabenListe()
    	{
    	}
    
    	// einen Ausgaben in die Liste einfügen
    	void hinzufuegen(Ausgaben ausgaben)
    	{
    		// Ein neues Listenelement erstellen und mit 'ausgaben' initialisieren
    		Listenelement *neuesListenelement = new Listenelement(ausgaben); 
    
    		// liste ist leer
    		if(istLeer())
    			ende = kopf = neuesListenelement;
    		else
    		{
    			// das letzte Element zeigt auf das neue Element
    			ende->nachfolger = neuesListenelement;
    
    			// das neue Element wird zum Letzten
    			ende = neuesListenelement;
    		}
    	}
    
    	// prüft ob die Liste leer ist
    	bool istLeer()
    	{
    		return (kopf == NULL) ? true : false;
    	}
    
    	// Liste löschen
    	void loeschen(void)
    	{
    		if(istLeer())
    			return;
    
    		// solange der Zeiger nicht Null ist, also noch Elemente vorhanden sind...
    		while(kopf->nachfolger != NULL)
    		{
    			// ...suche das vorletzte ELement
    			Listenelement *vorletztesElement = kopf;
    			while(vorletztesElement->nachfolger != ende)
    			{
    				vorletztesElement = vorletztesElement->nachfolger;
    			}
    
    			// lösche das letzte Element
    			delete ende;
    
    			// das vorletzte Element wird zum Letzten
    			vorletztesElement->nachfolger = NULL;
    			ende = vorletztesElement;
    		}
    
    		// zuletzt noch den Listenkopf löschen
    		delete kopf;
    	}
    
    	// zeigt alle Listenelemente
    	void elementeAnzeigen(void)
    	{
    		// aktueller Knoten
    		Listenelement *p = kopf;
    
    		// solange der Knoten nicht Null ist, also das Ende nicht erreicht ist...
    		while(p != NULL)
    		{
    			// ...Inhalt ausgeben
    			std::cout << "kategorie: "<< p->ausgaben.kategorie.c_str() 
    				<< " monat: " << p->ausgaben.monat 
    				<< " betrag: " << p->ausgaben.betrag 
    				<< " nummer: " << p->ausgaben.nummer << std::endl;
    
    			// der Nachfolger wird zum aktuellen Knoten
    			p = p->nachfolger;
    		}
    	}
    	//auswerten der Datensätze aus den Listenelement
    	void auswerten1(void)
    	{
             		// aktueller Knoten
    		Listenelement *p = kopf;
             	while(p != NULL)
    		{
    			// ...Inhalt ausgeben
        if(p->ausgaben.monat=="Januar") monatsbetrag[0]=monatsbetrag[0]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Februar") monatsbetrag[1]=monatsbetrag[1]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="März") monatsbetrag[2]=monatsbetrag[2]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="April") monatsbetrag[3]=monatsbetrag[3]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Mai") monatsbetrag[4]=monatsbetrag[4]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Juni") monatsbetrag[5]=monatsbetrag[5]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Juli") monatsbetrag[6]=monatsbetrag[6]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="August") monatsbetrag[7]=monatsbetrag[7]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="September") monatsbetrag[8]=monatsbetrag[8]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Oktober") monatsbetrag[9]=monatsbetrag[9]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="November") monatsbetrag[10]=monatsbetrag[10]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Dezember") monatsbetrag[11]=monatsbetrag[11]+ p->ausgaben.betrag;
    
    			// der Nachfolger wird zum aktuellen Knoten
    			p = p->nachfolger;
    		}
    
    		for(int i=0; i<=11; i++) 
            {
            printf("im Monat: %d %2.2lf \n", monate[i], monatsbetrag[i]);
            if(monatsbetrag[i]>500) printf("!!!!!!!!!!! Monatsbudget ueberschritten\n");
            }
        }
        	void auswerten2(void)
    	{
             		// aktueller Knoten
    		Listenelement *p = kopf;		
    		while(p != NULL)
    		{
    			// ...Inhalt ausgeben
         if(p->ausgaben.kategorie=="Urlaub"){ kategoriebetrag[0]=kategoriebetrag[0] +p->ausgaben.betrag; kategorie.push_back("Urlaub");}   
        else if(p->ausgaben.kategorie=="Tanken"){ kategoriebetrag[1]=kategoriebetrag[1] +p->ausgaben.betrag; kategorie.push_back("Tanken");}
        else if(p->ausgaben.kategorie=="Miete"){ kategoriebetrag[2]=kategoriebetrag[2] +p->ausgaben.betrag; kategorie.push_back("Miete");}
        else if(p->ausgaben.kategorie=="Kleidung"){ kategoriebetrag[3]=kategoriebetrag[3] +p->ausgaben.betrag; kategorie.push_back("Kleidung");}
        else if(p->ausgaben.kategorie=="Sex"){ kategoriebetrag[3]=kategoriebetrag[3] +p->ausgaben.betrag; kategorie.push_back("Sex");}
        else if(p->ausgaben.kategorie=="Kino"){ kategoriebetrag[3]=kategoriebetrag[3] +p->ausgaben.betrag; kategorie.push_back("Kino");}
    			// der Nachfolger wird zum aktuellen Knoten
    			   p = p->nachfolger;
           }		
    		for(int i=0; i<kategorie.size(); i++) 
            {
    
           printf("in Kategorie: %s %2.2lf \n", kategorie.at(i) , kategoriebetrag[i]); 
            }
         }
    };
    
    int main()
    {
        int i=0;
    	// Beispielsätze
    	Ausgaben ausgaben, ausgaben1, ausgaben2, ausgaben3, ausgaben4, ausgaben5, ausgaben6, ausgaben7, ausgaben8, ausgaben9, ausgaben10, ausgaben11;
    	ausgaben.kategorie = "Miete"; 
    	ausgaben.monat = "Januar";
    	ausgaben.nummer = 10;
    	ausgaben.betrag= 10;
    
    	ausgaben1.kategorie = "Tanken"; 
    	ausgaben1.monat = "Januar";
    	ausgaben1.nummer = 1;
    	ausgaben1.betrag= 40;
    
    	ausgaben2.kategorie = "Kleidung"; 
    	ausgaben2.monat = "Februar";
    	ausgaben2.nummer = 4;
    	ausgaben2.betrag= 100;
    
    	ausgaben3.kategorie = "Tanken"; 
    	ausgaben3.monat = "Februar";
    	ausgaben3.nummer = 2;
    	ausgaben3.betrag= 150;
    
    	ausgaben4.kategorie = "Urlaub";
    	ausgaben4.monat = "April";
    	ausgaben4.nummer = 5;
    	ausgaben4.betrag= 503;
    
    	ausgaben5.kategorie = "Miete"; 
    	ausgaben5.monat = "Mai";
    	ausgaben5.nummer = 6;
    	ausgaben5.betrag= 10;
    
    	ausgaben6.kategorie = "Tanken"; 
    	ausgaben6.monat = "April";
    	ausgaben6.nummer = 7;
    	ausgaben6.betrag= 40;
    
    	ausgaben7.kategorie = "Kleidung"; 
    	ausgaben7.monat = "April";
    	ausgaben7.nummer = 3;
    	ausgaben7.betrag= 100;
    
    	ausgaben8.kategorie = "Tanken"; 
    	ausgaben8.monat = "Juli";
    	ausgaben8.nummer = 7;
    	ausgaben8.betrag= 130;
    
    	ausgaben9.kategorie = "Urlaub";
    	ausgaben9.monat = "April";
    	ausgaben9.nummer = 9;
    	ausgaben9.betrag= 106;
    
    	ausgaben10.kategorie = "Urlaub";
    	ausgaben10.monat = "Dezember";
    	ausgaben10.nummer = 10;
    	ausgaben10.betrag= 56;
    
    	ausgaben11.kategorie = "Sex";
    	ausgaben11.monat = "Novenmber";
    	ausgaben11.nummer =13;
    	ausgaben11.betrag= 56;
    
    	AusgabenListe ausgabene;
    	ausgabene.hinzufuegen(ausgaben);
    	ausgabene.hinzufuegen(ausgaben1);
    	ausgabene.hinzufuegen(ausgaben2);
    	ausgabene.hinzufuegen(ausgaben3);
    	ausgabene.hinzufuegen(ausgaben4);
    	ausgabene.hinzufuegen(ausgaben5);
    	ausgabene.hinzufuegen(ausgaben6);
    	ausgabene.hinzufuegen(ausgaben7);
    	ausgabene.hinzufuegen(ausgaben8);
    	ausgabene.hinzufuegen(ausgaben9);
    	ausgabene.hinzufuegen(ausgaben10);
    	ausgabene.hinzufuegen(ausgaben11);
    	ausgabene.elementeAnzeigen();
    
        ausgabene.auswerten1();
    
        ausgabene.auswerten2();
    
    	ausgabene.loeschen();
    
    	std::cin.get();
    
    	return 0;
    }
    


  • Ich glaub mal, dass %s einen C-String erwartet. Stattdessen übergibst du aber ein c++sches std::string . Und dein Compiler checkt das in der Compile-Zeit.



  • Warum benutzt du nicht cout?



  • Fehlermeldung beo COUT:

    main.cpp: In member function `void AusgabenListe::auswerten2()':
    main.cpp:193: error: `cout' undeclared (first use this function)
    main.cpp:193: error: (Each undeclared identifier is reported only once for each function it appears in.)
    main.cpp:193: error: expected `;' before ')' token
    
    #include <cstdlib>
    #include <iostream>
    #include <string.h>
    #include <vector>
    #include <stdio.h>
    
    // Ausgaben als Datenstruktur
    struct Ausgaben 
    { 
        std::string kategorie; 
        std::string monat; 
        int nummer; 
        double betrag;
        double monatsbetrag;
    }; 
    double monatsbetrag[12];
    double kategoriebetrag[8];
    int monate[13]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    std::vector<std::string> kategorie;
    // Grundgerüst
    class AusgabenListe
    {
    
    	// Definition eines Listenelements 
    	class Listenelement 
    	{ 
    	public:
    		// Konstruktor
    		Listenelement(Ausgaben ausgaben)
    		{
    			this->ausgaben.nummer = ausgaben.nummer;
    			this->ausgaben.monat = ausgaben.monat;
    			this->ausgaben.kategorie = ausgaben.kategorie;
    			this->ausgaben.betrag = ausgaben.betrag;
    			this->ausgaben.monatsbetrag = ausgaben.monatsbetrag;
    			this->nachfolger = NULL;
    		}
    
        	// Das sind die Daten die wir verwalten wollen ( Datenbereich) 
        	Ausgaben ausgaben;
    
        	// Zeiger auf den Nachfolger ( Zeiger) 
        	Listenelement *nachfolger; 
    	};
    
    	// Listenkopf
    	Listenelement* kopf;
    
    	// Listenende
    	Listenelement* ende;
    
    public:
    
    	// Konstruktor
    	AusgabenListe(void)
    	{
    		kopf = ende = NULL;
    	}
    
    	// Destruktor
    	~AusgabenListe()
    	{
    	}
    
    	// einen Ausgaben in die Liste einfügen
    	void hinzufuegen(Ausgaben ausgaben)
    	{
    		// Ein neues Listenelement erstellen und mit 'ausgaben' initialisieren
    		Listenelement *neuesListenelement = new Listenelement(ausgaben); 
    
    		// liste ist leer
    		if(istLeer())
    			ende = kopf = neuesListenelement;
    		else
    		{
    			// das letzte Element zeigt auf das neue Element
    			ende->nachfolger = neuesListenelement;
    
    			// das neue Element wird zum Letzten
    			ende = neuesListenelement;
    		}
    	}
    
    	// prüft ob die Liste leer ist
    	bool istLeer()
    	{
    		return (kopf == NULL) ? true : false;
    	}
    
    	// Liste löschen
    	void loeschen(void)
    	{
    		if(istLeer())
    			return;
    
    		// solange der Zeiger nicht Null ist, also noch Elemente vorhanden sind...
    		while(kopf->nachfolger != NULL)
    		{
    			// ...suche das vorletzte ELement
    			Listenelement *vorletztesElement = kopf;
    			while(vorletztesElement->nachfolger != ende)
    			{
    				vorletztesElement = vorletztesElement->nachfolger;
    			}
    
    			// lösche das letzte Element
    			delete ende;
    
    			// das vorletzte Element wird zum Letzten
    			vorletztesElement->nachfolger = NULL;
    			ende = vorletztesElement;
    		}
    
    		// zuletzt noch den Listenkopf löschen
    		delete kopf;
    	}
    
    	// zeigt alle Listenelemente
    	void elementeAnzeigen(void)
    	{
    		// aktueller Knoten
    		Listenelement *p = kopf;
    
    		// solange der Knoten nicht Null ist, also das Ende nicht erreicht ist...
    		while(p != NULL)
    		{
    			// ...Inhalt ausgeben
    			std::cout << "kategorie: "<< p->ausgaben.kategorie.c_str() 
    				<< " monat: " << p->ausgaben.monat 
    				<< " betrag: " << p->ausgaben.betrag 
    				<< " nummer: " << p->ausgaben.nummer << std::endl;
    
    			// der Nachfolger wird zum aktuellen Knoten
    			p = p->nachfolger;
    		}
    	}
    	//auswerten der Datensätze aus den Listenelement
    	void auswerten1(void)
    	{
             		// aktueller Knoten
    		Listenelement *p = kopf;
             	while(p != NULL)
    		{
    			// ...Inhalt ausgeben
        if(p->ausgaben.monat=="Januar") monatsbetrag[0]=monatsbetrag[0]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Februar") monatsbetrag[1]=monatsbetrag[1]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="März") monatsbetrag[2]=monatsbetrag[2]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="April") monatsbetrag[3]=monatsbetrag[3]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Mai") monatsbetrag[4]=monatsbetrag[4]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Juni") monatsbetrag[5]=monatsbetrag[5]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Juli") monatsbetrag[6]=monatsbetrag[6]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="August") monatsbetrag[7]=monatsbetrag[7]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="September") monatsbetrag[8]=monatsbetrag[8]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Oktober") monatsbetrag[9]=monatsbetrag[9]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="November") monatsbetrag[10]=monatsbetrag[10]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Dezember") monatsbetrag[11]=monatsbetrag[11]+ p->ausgaben.betrag;
    
    			// der Nachfolger wird zum aktuellen Knoten
    			p = p->nachfolger;
    		}
    
    		for(int i=0; i<=11; i++) 
            {
            printf("im Monat: %d %2.2lf \n", monate[i], monatsbetrag[i]);
            if(monatsbetrag[i]>500) printf("!!!!!!!!!!! Monatsbudget ueberschritten\n");
            }
        }
        	void auswerten2(void)
    	{
             		// aktueller Knoten
    		Listenelement *p = kopf;		
    		while(p != NULL)
    		{
    			// ...Inhalt ausgeben
         if(p->ausgaben.kategorie=="Urlaub"){ kategoriebetrag[0]=kategoriebetrag[0] +p->ausgaben.betrag; kategorie.push_back("Urlaub");}   
        else if(p->ausgaben.kategorie=="Tanken"){ kategoriebetrag[1]=kategoriebetrag[1] +p->ausgaben.betrag; kategorie.push_back("Tanken");}
        else if(p->ausgaben.kategorie=="Miete"){ kategoriebetrag[2]=kategoriebetrag[2] +p->ausgaben.betrag; kategorie.push_back("Miete");}
        else if(p->ausgaben.kategorie=="Kleidung"){ kategoriebetrag[3]=kategoriebetrag[3] +p->ausgaben.betrag; kategorie.push_back("Kleidung");}
        else if(p->ausgaben.kategorie=="Sex"){ kategoriebetrag[3]=kategoriebetrag[3] +p->ausgaben.betrag; kategorie.push_back("Sex");}
        else if(p->ausgaben.kategorie=="Kino"){ kategoriebetrag[3]=kategoriebetrag[3] +p->ausgaben.betrag; kategorie.push_back("Kino");}
    			// der Nachfolger wird zum aktuellen Knoten
    			   p = p->nachfolger;
           }		
    		for(int i=0; i<kategorie.size(); i++) 
            {
    
           //printf("in Kategorie: %s %2.2lf \n", kategorie.at(i) , kategoriebetrag[i]); 
           cout<<kategorie.at(i); cout<<kategoriebetrag[i])<<endl; 
            }
         }
    };
    
    int main()
    {
        int i=0;
    	// Beispielsätze
    	Ausgaben ausgaben, ausgaben1, ausgaben2, ausgaben3, ausgaben4, ausgaben5, ausgaben6, ausgaben7, ausgaben8, ausgaben9, ausgaben10, ausgaben11;
    	ausgaben.kategorie = "Miete"; 
    	ausgaben.monat = "Januar";
    	ausgaben.nummer = 10;
    	ausgaben.betrag= 10;
    
    	ausgaben1.kategorie = "Tanken"; 
    	ausgaben1.monat = "Januar";
    	ausgaben1.nummer = 1;
    	ausgaben1.betrag= 40;
    
    	ausgaben2.kategorie = "Kleidung"; 
    	ausgaben2.monat = "Februar";
    	ausgaben2.nummer = 4;
    	ausgaben2.betrag= 100;
    
    	ausgaben3.kategorie = "Tanken"; 
    	ausgaben3.monat = "Februar";
    	ausgaben3.nummer = 2;
    	ausgaben3.betrag= 150;
    
    	ausgaben4.kategorie = "Urlaub";
    	ausgaben4.monat = "April";
    	ausgaben4.nummer = 5;
    	ausgaben4.betrag= 503;
    
    	ausgaben5.kategorie = "Miete"; 
    	ausgaben5.monat = "Mai";
    	ausgaben5.nummer = 6;
    	ausgaben5.betrag= 10;
    
    	ausgaben6.kategorie = "Tanken"; 
    	ausgaben6.monat = "April";
    	ausgaben6.nummer = 7;
    	ausgaben6.betrag= 40;
    
    	ausgaben7.kategorie = "Kleidung"; 
    	ausgaben7.monat = "April";
    	ausgaben7.nummer = 3;
    	ausgaben7.betrag= 100;
    
    	ausgaben8.kategorie = "Tanken"; 
    	ausgaben8.monat = "Juli";
    	ausgaben8.nummer = 7;
    	ausgaben8.betrag= 130;
    
    	ausgaben9.kategorie = "Urlaub";
    	ausgaben9.monat = "April";
    	ausgaben9.nummer = 9;
    	ausgaben9.betrag= 106;
    
    	ausgaben10.kategorie = "Urlaub";
    	ausgaben10.monat = "Dezember";
    	ausgaben10.nummer = 10;
    	ausgaben10.betrag= 56;
    
    	ausgaben11.kategorie = "Sex";
    	ausgaben11.monat = "Novenmber";
    	ausgaben11.nummer =13;
    	ausgaben11.betrag= 56;
    
    	AusgabenListe ausgabene;
    	ausgabene.hinzufuegen(ausgaben);
    	ausgabene.hinzufuegen(ausgaben1);
    	ausgabene.hinzufuegen(ausgaben2);
    	ausgabene.hinzufuegen(ausgaben3);
    	ausgabene.hinzufuegen(ausgaben4);
    	ausgabene.hinzufuegen(ausgaben5);
    	ausgabene.hinzufuegen(ausgaben6);
    	ausgabene.hinzufuegen(ausgaben7);
    	ausgabene.hinzufuegen(ausgaben8);
    	ausgabene.hinzufuegen(ausgaben9);
    	ausgabene.hinzufuegen(ausgaben10);
    	ausgabene.hinzufuegen(ausgaben11);
    	ausgabene.elementeAnzeigen();
    
        ausgabene.auswerten1();
    
        ausgabene.auswerten2();
    
    	ausgabene.loeschen();
    
    	std::cin.get();
    
    	return 0;
    }
     :confused:  wie ich bereits gesagt habe, printf und cout funktionieren beide nicht....
    


  • Header inkludieren



  • Scope-Bezeichner dazuschreiben*



  • std::cout, wie alles andere auch, das nicht aus C kommt (und dafür müsste es eigentlich auch immer eine Deklaration mit std geben). Lass das printf generell weg, wenn du dir nicht in den Fuss schießen willst.

    Kein string.h oder stdio.h, dafür aber string inkludieren.



  • Und das, was du eigentlich willst ist nur std::vector<Ausgabe>



  • Jetzt läuft es zwar, aber die ausgabe passt nicht ganz.

    ich meine, ich hatte im November Sex für 56 €, stattdessen steht da aber: Miete 56 € und Kleidung 20 € 😕

    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <vector>
    #include <stdio.h>
    
    // Ausgaben als Datenstruktur
    struct Ausgaben 
    { 
        std::string kategorie; 
        std::string monat; 
        int nummer; 
        double betrag;
        double monatsbetrag;
    }; 
    double monatsbetrag[12];
    double kategoriebetrag[8];
    int monate[13]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    std::vector<std::string> kategorie;
    // Grundgerüst
    class AusgabenListe
    {
    
    	// Definition eines Listenelements 
    	class Listenelement 
    	{ 
    	public:
    		// Konstruktor
    		Listenelement(Ausgaben ausgaben)
    		{
    			this->ausgaben.nummer = ausgaben.nummer;
    			this->ausgaben.monat = ausgaben.monat;
    			this->ausgaben.kategorie = ausgaben.kategorie;
    			this->ausgaben.betrag = ausgaben.betrag;
    			this->ausgaben.monatsbetrag = ausgaben.monatsbetrag;
    			this->nachfolger = NULL;
    		}
    
        	// Das sind die Daten die wir verwalten wollen ( Datenbereich) 
        	Ausgaben ausgaben;
    
        	// Zeiger auf den Nachfolger ( Zeiger) 
        	Listenelement *nachfolger; 
    	};
    
    	// Listenkopf
    	Listenelement* kopf;
    
    	// Listenende
    	Listenelement* ende;
    
    public:
    
    	// Konstruktor
    	AusgabenListe(void)
    	{
    		kopf = ende = NULL;
    	}
    
    	// Destruktor
    	~AusgabenListe()
    	{
    	}
    
    	// einen Ausgaben in die Liste einfügen
    	void hinzufuegen(Ausgaben ausgaben)
    	{
    		// Ein neues Listenelement erstellen und mit 'ausgaben' initialisieren
    		Listenelement *neuesListenelement = new Listenelement(ausgaben); 
    
    		// liste ist leer
    		if(istLeer())
    			ende = kopf = neuesListenelement;
    		else
    		{
    			// das letzte Element zeigt auf das neue Element
    			ende->nachfolger = neuesListenelement;
    
    			// das neue Element wird zum Letzten
    			ende = neuesListenelement;
    		}
    	}
    
    	// prüft ob die Liste leer ist
    	bool istLeer()
    	{
    		return (kopf == NULL) ? true : false;
    	}
    
    	// Liste löschen
    	void loeschen(void)
    	{
    		if(istLeer())
    			return;
    
    		// solange der Zeiger nicht Null ist, also noch Elemente vorhanden sind...
    		while(kopf->nachfolger != NULL)
    		{
    			// ...suche das vorletzte ELement
    			Listenelement *vorletztesElement = kopf;
    			while(vorletztesElement->nachfolger != ende)
    			{
    				vorletztesElement = vorletztesElement->nachfolger;
    			}
    
    			// lösche das letzte Element
    			delete ende;
    
    			// das vorletzte Element wird zum Letzten
    			vorletztesElement->nachfolger = NULL;
    			ende = vorletztesElement;
    		}
    
    		// zuletzt noch den Listenkopf löschen
    		delete kopf;
    	}
    
    	// zeigt alle Listenelemente
    	void elementeAnzeigen(void)
    	{
    		// aktueller Knoten
    		Listenelement *p = kopf;
    
    		// solange der Knoten nicht Null ist, also das Ende nicht erreicht ist...
    		while(p != NULL)
    		{
    			// ...Inhalt ausgeben
    			std::cout << "kategorie: "<< p->ausgaben.kategorie.c_str() 
    				<< " monat: " << p->ausgaben.monat 
    				<< " betrag: " << p->ausgaben.betrag 
    				<< " nummer: " << p->ausgaben.nummer << std::endl;
    
    			// der Nachfolger wird zum aktuellen Knoten
    			p = p->nachfolger;
    		}
    	}
    	//auswerten der Datensätze aus den Listenelement
    	void auswerten1(void)
    	{
             		// aktueller Knoten
    		Listenelement *p = kopf;
             	while(p != NULL)
    		{
    			// ...Inhalt ausgeben
        if(p->ausgaben.monat=="Januar") monatsbetrag[0]=monatsbetrag[0]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Februar") monatsbetrag[1]=monatsbetrag[1]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="März") monatsbetrag[2]=monatsbetrag[2]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="April") monatsbetrag[3]=monatsbetrag[3]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Mai") monatsbetrag[4]=monatsbetrag[4]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Juni") monatsbetrag[5]=monatsbetrag[5]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Juli") monatsbetrag[6]=monatsbetrag[6]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="August") monatsbetrag[7]=monatsbetrag[7]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="September") monatsbetrag[8]=monatsbetrag[8]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Oktober") monatsbetrag[9]=monatsbetrag[9]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="November") monatsbetrag[10]=monatsbetrag[10]+ p->ausgaben.betrag;
        else if(p->ausgaben.monat=="Dezember") monatsbetrag[11]=monatsbetrag[11]+ p->ausgaben.betrag;
    
    			// der Nachfolger wird zum aktuellen Knoten
    			p = p->nachfolger;
    		}
    
    		for(int i=0; i<=11; i++) 
            {
            printf("im Monat: %d %2.2lf \n", monate[i], monatsbetrag[i]);
            if(monatsbetrag[i]>500) printf("!!!!!!!!!!! Monatsbudget ueberschritten\n");
            }
        }
        	void auswerten2(void)
    	{
             		// aktueller Knoten
    		Listenelement *p = kopf;		
    		while(p != NULL)
    		{
    			// ...Inhalt ausgeben
         if(p->ausgaben.kategorie=="Urlaub"){ kategoriebetrag[0]=kategoriebetrag[0] +p->ausgaben.betrag; kategorie[0]==("Urlaub");}   
        else if(p->ausgaben.kategorie=="Tanken"){ kategoriebetrag[1]=kategoriebetrag[1] +p->ausgaben.betrag; kategorie.push_back("Tanken");}
        else if(p->ausgaben.kategorie=="Miete"){ kategoriebetrag[2]=kategoriebetrag[2] +p->ausgaben.betrag; kategorie.push_back("Miete");}
        else if(p->ausgaben.kategorie=="Kleidung"){ kategoriebetrag[3]=kategoriebetrag[3] +p->ausgaben.betrag; kategorie.push_back("Kleidung");}
        else if(p->ausgaben.kategorie=="Sex"){ kategoriebetrag[4]=kategoriebetrag[4] +p->ausgaben.betrag; kategorie.push_back("Sex");}
        else if(p->ausgaben.kategorie=="Kino"){ kategoriebetrag[5]=kategoriebetrag[5] +p->ausgaben.betrag; kategorie.push_back("Kino");}
    			// der Nachfolger wird zum aktuellen Knoten
    			   p = p->nachfolger;
           }		
    		for(int i=0; i<kategorie.size(); i++) 
            {
           std::cout<<kategorie.at(i); 
           std::cout<<kategoriebetrag[i]<<"\n"; 
           }
         }
    };
    
    int main()
    {
        int i=0;
    	// Beispielsätze
    	Ausgaben ausgaben, ausgaben1, ausgaben2, ausgaben3, ausgaben4, ausgaben5, ausgaben6, ausgaben7, ausgaben8, ausgaben9, ausgaben10, ausgaben11;
    	ausgaben.kategorie = "Miete"; 
    	ausgaben.monat = "Januar";
    	ausgaben.nummer = 10;
    	ausgaben.betrag= 10;
    
    	ausgaben1.kategorie = "Tanken"; 
    	ausgaben1.monat = "Januar";
    	ausgaben1.nummer = 1;
    	ausgaben1.betrag= 40;
    
    	ausgaben2.kategorie = "Kleidung"; 
    	ausgaben2.monat = "Februar";
    	ausgaben2.nummer = 4;
    	ausgaben2.betrag= 100;
    
    	ausgaben3.kategorie = "Tanken"; 
    	ausgaben3.monat = "Februar";
    	ausgaben3.nummer = 2;
    	ausgaben3.betrag= 150;
    
    	ausgaben4.kategorie = "Urlaub";
    	ausgaben4.monat = "April";
    	ausgaben4.nummer = 5;
    	ausgaben4.betrag= 503;
    
    	ausgaben5.kategorie = "Miete"; 
    	ausgaben5.monat = "Mai";
    	ausgaben5.nummer = 6;
    	ausgaben5.betrag= 10;
    
    	ausgaben6.kategorie = "Tanken"; 
    	ausgaben6.monat = "April";
    	ausgaben6.nummer = 7;
    	ausgaben6.betrag= 40;
    
    	ausgaben7.kategorie = "Kleidung"; 
    	ausgaben7.monat = "April";
    	ausgaben7.nummer = 3;
    	ausgaben7.betrag= 100;
    
    	ausgaben8.kategorie = "Tanken"; 
    	ausgaben8.monat = "Juli";
    	ausgaben8.nummer = 7;
    	ausgaben8.betrag= 130;
    
    	ausgaben9.kategorie = "Urlaub";
    	ausgaben9.monat = "April";
    	ausgaben9.nummer = 9;
    	ausgaben9.betrag= 106;
    
    	ausgaben10.kategorie = "Urlaub";
    	ausgaben10.monat = "Dezember";
    	ausgaben10.nummer = 10;
    	ausgaben10.betrag= 56;
    
    	ausgaben11.kategorie = "Sex";
    	ausgaben11.monat = "Novenmber";
    	ausgaben11.nummer =13;
    	ausgaben11.betrag= 56;
    
    	AusgabenListe ausgabene;
    	ausgabene.hinzufuegen(ausgaben);
    	ausgabene.hinzufuegen(ausgaben1);
    	ausgabene.hinzufuegen(ausgaben2);
    	ausgabene.hinzufuegen(ausgaben3);
    	ausgabene.hinzufuegen(ausgaben4);
    	ausgabene.hinzufuegen(ausgaben5);
    	ausgabene.hinzufuegen(ausgaben6);
    	ausgabene.hinzufuegen(ausgaben7);
    	ausgabene.hinzufuegen(ausgaben8);
    	ausgabene.hinzufuegen(ausgaben9);
    	ausgabene.hinzufuegen(ausgaben10);
    	ausgabene.hinzufuegen(ausgaben11);
    	ausgabene.elementeAnzeigen();
    
        ausgabene.auswerten1();
    
        ausgabene.auswerten2();
    
    	ausgabene.loeschen();
    
    	std::cin.get();
    
    	return 0;
    }
    

Anmelden zum Antworten