Fehler in einer Klasse



  • Mach ne

    do
    {
    //...
    }
    while(abfrage != 10)
    

    um dein switch...

    Gruß
    zeigerzeiger



  • nee das klappt och net... der springt net wieder zum menü zurück...also ich hab die shcleife gleich beim menü angesetz und dann noch mti um den switch block drummerherum



  • Ist auch kein wunder...

    du springst schließlich bei jedem case aus dem Programm, mach mal statt

    return 0;
    

    ein

    break;
    


  • @zeigerzeiger, danke du hast mir bis jetzt shcon sehr weitergeholfen jedoch hat es noch cniht den gewünschten effekt. es soll ja so sein das nach jeder menüausführung also sei es punkt 1 oder punkt 2 bis punkt 9, das programm automatisch wieder zum menü zurückspringen soll nachdem einer der menüpunkte ausgeführt wurde, also das ergebnis zeigen dann warten und wieder zum menü zurückspringen damit man sich noch andere unterpunkte angucken kann



  • dann machst du eben die Bildschirmausgabe und die eingabe der Auswahl auch noch in die do while schleife...

    Gruß
    zeigerzeiger



  • @zeigerzeiger, boah ich verzweifel, es geht net ,mit beiden möglichkeiten nicht.



  • Na gut, weil du es bist... 😉

    #include<iostream> 
    #include<vector> 
    #include<algorithm> 
    
    using namespace std; 
    
    class Menge 
    { 
        public: 
        void hinzufuegen(int el);                  //Fügt Elemente in den Vector ein. 
    
        void entfernen(int el);                    //Entfernt Elemente in der Liste. 
    
        bool istvorhanden(int el);                 //Prüft ob ein Element schon vorhanden ist. 
    
        void size();                             //Gibt die Größe der Liste zurück. 
    
        void anzeigen() ;                          // Gibt die Elemente der Liste normal aus. 
    
        void loeschen();                           // Löscht die Liste. 
    
        void getmax(vector<int>Liste);              // Findet das Maximum. 
    
        void getmin(vector<int>Liste);              // Findet das Minimum. 
    
        void sortieren(vector<int>Liste);          // sortiert die Liste nach Bubblesort. 
    
        private: 
        vector<int> Liste;                         // Ist für die Speicherung zuständig. 
    
    };
    
    ////////////////////////////////////////////////////////////// 
    bool Menge::istvorhanden(int el) 
    { 
        for(size_t i=0;i<Liste.size();++i) 
        { 
           if(el==Liste[i]) 
           { 
               cout<<"Diese Zahl ist schon vorhanden"<<endl; 
               return true; 
           } 
           else 
           { 
               cout<<"Zahl nicht vorhanden kann also noch eingefuegt werden"<<endl; 
               return false; 
           } 
        } 
    } 
    ////////////////////////////////////////////////////////////// 
    void Menge::sortieren(vector<int>Liste) 
    { 
        vector<int>sortiert_Liste=Liste; 
        for(size_t i=1;i<sortiert_Liste.size();++i) 
        { 
            for(size_t j=0;j<i;++j) 
            { 
                if(sortiert_Liste[i]<sortiert_Liste[j]) 
                { 
                    int speicher=sortiert_Liste[i]; 
                    sortiert_Liste[i]=sortiert_Liste[j]; 
                    sortiert_Liste[j]=speicher; 
                } 
            } 
        } 
        for(size_t i=0;i<Liste.size();++i) 
        { 
            cout<<"Der Inhalt ist nun: "<<endl; 
            cout<<sortiert_Liste[i]<<endl; 
        } 
    } 
    ////////////////////////////////////////////////////////////////// 
    void Menge::anzeigen() 
    { 
       sortieren(Liste); 
    } 
    ///////////////////////////////////////////////////////////////// 
    void Menge::getmax(vector<int>Liste) 
    { 
        cout<<"Das Maximum ist: "<<*std::max_element(this->Liste.begin(), Liste.end())<<endl; 
    } 
    ///////////////////////////////////////////////////////////////// 
    void Menge::getmin(vector<int>Liste) 
    { 
    
        cout<<"Das Minimum ist: "<<*std::min_element(this->Liste.begin(), this->Liste.end())<<endl; 
    } 
    /////////////////////////////////////////////////////////////////// 
    void Menge::size() 
    { 
        int i; 
        for( i=0;i<Liste.size();++i) 
        { 
        } 
        cout<<"Die Liste hat"<<i<<" Elemente"<<endl; 
    } 
    ////////////////////////////////////////////////////////////////// 
    void Menge::hinzufuegen(int el) 
    { 
    
        if(istvorhanden(el)==true) 
        { 
            cout<<"Element wird nicht eingefuegt,da vorhanden"<<endl; 
        } 
        else if(istvorhanden(el)==false) 
        { 
        Liste.push_back(el); 
    
        sortieren(Liste); 
        } 
    } 
    ////////////////////////////////////////////////////////////////// 
    void Menge::entfernen(int el) 
    { 
        if(istvorhanden(el)==true) 
        { 
            vector<int>::iterator pos=find(Liste.begin(),Liste.end(),el); 
    
            Liste.erase(pos); 
    
        } 
        else if(istvorhanden(el)==false) 
        { 
           cout<<" Element ist nicht vorhanden und muss nicht gelöscht werden"<<endl; 
        } 
    
    } 
    ///////////////////////////////////////////////////////////////////// 
    void Menge::loeschen() 
    { 
        Liste.clear(); 
    }
    
    void bildschirm() 
    { 
    
        cout<<"-----------Listenprogramm-----------"<<endl; 
        cout<<endl; 
        cout<<" 1. Ein Element hinzufuegen"<<endl; 
        cout<<" 2. Ein Element entfernen"<<endl; 
        cout<<" 3. Ein Element auf vorhandensein pruefen"<<endl; 
        cout<<" 4. Die Groesse der Liste anzeigen"<<endl; 
        cout<<" 5. Die Liste anzeigen"<<endl; 
        cout<<" 6. Die Liste loeschen"<<endl; 
        cout<<" 7. Das Maximum anzeigen"<<endl; 
        cout<<" 8. Das Minimum anzeigen"<<endl; 
        cout<<" 9. Die Liste sortieren"<<endl; 
        cout<<" 10. Beenden"<<endl; 
        cout<<endl; 
        cout<<"------------------------------------"<<endl; 
        cout<<endl; 
        cout<<"---------Bitte Waehlen Sie----------"<<endl; 
    
    } 
    //////////////////////////////////////////////////////////// 
    
    int main() 
    { 
        Menge eineMenge; 
    
        int in_Liste = 0,abfrage = 0; 
    
        vector<int>Fuell_Liste; 
    
        do
        {
    	    bildschirm(); 
    
    	    //system("CLS"); 
    	    cin >> abfrage;
    
    	    switch(abfrage) 
    	    { 
    	        case 1: 
    	        cout<<"Geben sie ein neue Zahl ein"<<endl; 
    	        cout<<endl; 
    	        cin>>in_Liste; 
    	        eineMenge.hinzufuegen(in_Liste); 
    	        break; 
    
    	        case 2: 
    	        cout<<"Geben sie das zu entfernede Element ein"<<endl; 
    	        cout<<endl; 
    	        cin>>in_Liste; 
    	        eineMenge.entfernen(in_Liste); 
    	        break; 
    
    	        case 3: 
    	        cout<<"Geben sie das zupruefende Element ein"<<endl; 
    	        cout<<endl; 
    	        cin>>in_Liste; 
    	        eineMenge.istvorhanden(in_Liste); 
    	        break; 
    
    	        case 4: 
    	        eineMenge.size(); 
    	        break; 
    
    	        case 5: 
    	        eineMenge.anzeigen(); 
    	        break; 
    
    	        case 6: 
    	        cout<<"Liste wird geloescht..."<<endl; 
    	        eineMenge.loeschen(); 
    	        break; 
    
    	        case 7: 
    	        eineMenge.getmax(Fuell_Liste); 
    	        break; 
    
    	        case 8: 
    	        eineMenge.getmin(Fuell_Liste); 
    	        break; 
    
    	        case 9: 
    	        cout<<"Liste wird nun sortiert"<<endl; 
    	        eineMenge.sortieren(Fuell_Liste); 
    	        break; 
    
    	        case 10:
    	        default:
    	        break;
    	    }
        }
        while(abfrage != 10);
    
        return 0;
    }
    

    Soweit müsste das dann klappen...

    Gruß
    zeigerzeiger



  • jut alles klar soweit geht es jetzt, jetzt habe ich unr ein problem weiterhin,, wenn ich den ersten punkt amche, also was hinzufügen und dann den punkt wo er den inhalt zeigt, wird nix gezeigt, anscheind is die liste leer... hab ichw as falsch übergeben oder warum der fehler,

    Sorry leute das ich eure Nerven so strapaziere, is halt mein erstes klassen projekt.Wäre trotzdem über hilfe sehr dankbar



  • kann sich vieleicht einer maldem problem annehmen da ich absoult nicht mehr weiter weiß... ich weiß nich warum die liste net gefüllt wird.... kann mir einer helfen



  • Es könnte ja auch daran liegen, daß die Methode anzeigen() gar keine Lust hat, etwas anzuzeigen 😉

    void Menge::anzeigen() 
    { 
       sortieren(Liste); 
    }
    

    PS: Was wollen eigentlich die Parameter bei getmax(), getmin() und sortieren() darstellen?



  • naja wennde guckst, siehste ja das eigentlich die methode sortieren,sortiert und dann gleichzeitig anzeig, und getmax zeigt das maximum in dem vector an und bei getmin andersum...verstehste wie ich es meine



  • Die Methoden sollten doch eigentlich alle mit dem Member "vector<int> Liste;" arbeiten - also ist es nicht nötig, den zu sortierenden bzw. zu durchsuchenden vector<> nochmal als Parameter mitzugeben.

    Firefighter schrieb:

    naja wennde guckst, siehste ja das eigentlich die methode sortieren,sortiert und dann gleichzeitig anzeig

    Da solltest du nochmal die Aufgabenteilung der Methoden überdenken - anzeigen() sollte sich um die Anzeige kümmern und nicht sortieren (dafür ist sortieren() da) und umgekehrt.



  • Firefighter schrieb:

    naja wennde guckst, siehste ja das eigentlich die methode sortieren,sortiert und dann gleichzeitig anzeig,...

    Nur mal so am Rande:
    Eine Funktion sollte möglichst eine klar umrissene Aufgabe erledigen. Das macht das Lesen des Codes zum einen leichter, zum anderen ist es spätestens in der Arbeit im Team unabdingbar. Man kann nicht erwarten das sich andere den Sourcecode durchlesen um herauszufinden was die Methode macht (Man entwickelt gegen die Schnittstelle, sprich die Deklaration, nicht die konkrete Implementierung).

    cu André



  • Die Methoden sollten doch eigentlich alle mit dem Member "vector<int> Liste;" arbeiten - also ist es nicht nötig, den zu sortierenden bzw. zu durchsuchenden vector<> nochmal als Parameter mitzugeben.

    wie meinste das... meinste damit ich soll aus dem methoden prototypen das

    vector<int>Liste
    

    rausnehmen und gar keine wert übergeben?? und dann nur in die Methode reinschreiben ,wenn es zum soriteren kommt, welchen vector er nehmen soll, nämlich den einen der nur unter private vergeben ist.meinste das so??



  • Ja, genau so meinte ich das (bei der einfügen()-Methode z.B. hast du es ja auch so gemacht ;))



  • jop alles klar ich habs geändert, also net in dem code hier im forum...aber funktionieren tut es immernoch net...also anscheint fügt der das elemtn gar net ein,...so ein mist



  • Schau dir doch mal im Debugger an, was da unterwegs passiert 😉



  • bei C::B kann ich irgendwie net debuggen???



  • hab den fehler endlich gefunden, danke jungs für eure zeit



  • du hast hier doppelt list, nicht effizient, entweder list erzeugt in class, dann solltest du immer callbyreference angeben (evtl mit const) od von aussen, dann schreib auch "void anzeigen()" ausserhalb von der class, intern sollst du gar nichts speichern


Anmelden zum Antworten