000
23.10.2016, 13:34 Uhr
~Julia_w
Gast
|
Servus Progger, ich möchte gerne auf den Inhalt von "std::vector<std::string> kategorie" an der Stelle [i] mit printf oder cout zugreifen. Leider erhalte ich immer eine Felhermeldung an dieser Stelle:
Code: |
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
C++: |
#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; }
|
|