Probleme mit vector in Klasse



  • Hallo an alle die - im Gegensatz zu mir - wissen wo bei einem c++ Prog vorne und hinten ist, Zeit und und Nerven haben mir zu helfen (BITTE BITTE ;)).
    Ich kenne mich mit vector und class noch nicht so gut aus, versuche mir das Wissen gerade anzueignen und muss ein Programm schreiben. Irgendetwas mache ich dabei aber falsch und meine Literatur kann mir dazu leider nicht weiterhelfen bzw. kapier ich es einfach nicht.

    Compiler sagt mir

    ISO C++ forbids declaration of `vector' with no type

    (in headerdatei)

    //das mainprogramm:
    
    #include <iostream>
    #include "menge.h"
    using namespace std;
    
    int main(){
        intMenge menge;
        menge.hinzufuegen(20);
        menge.hinzufuegen(-5);
        menge.hinzufuegen(30);
    
        return(0);
    }
    
    //die programmdatei:
    
    #include <iostream>
    #include <vector>
    #include <bitset>
    #include "menge.h"
    
    void intMenge::hinzufuegen(int el){
         werte.push_back(el);
         }
    
    void intMenge::anzeigen(){
         for(size_t i=0; i<werte.size(); i++){
                    cout <<werte[i] << "\n";
                    }
    
    //und die headerdatei:
    
    #include <vector>
    #ifndef menge_h
    #define menge_h menge_h
    
    class intMenge {
          public:
                 void hinzufuegen(int el);
                 void entfernen(int el);
                 bool istMitglied(int el);
                 size_t size();
                 void anzeigen();
                 void loeschen();
                 void getMax();
                 void getMin();              //die meisten Funktionen brauch ich 
                                             //erst später..
          private:
                 std::vector<int> werte;
                 };
    #endif
    

    Bitte schlagt mich nicht wenns absuluter Schwachsinn ist, wäre in dem Fall auch um allgemeine Aufklärung dankbar.

    Danke schonmal im Voraus für alle die sich das bis hier angetan haben!



  • Dies

    vector<int> werte();
    

    durch jenes ersetzten

    vector<int> werte;
    

    Man deklariert die Variablen an dieser Stelle und legt keine Instanz an, daher darf man da keine Klammern hintendran schreiben.



  • Erstmal solltest du die Klammern hinter der Definition von intMenge::werte weglassen - damit erzeugst du eine private Memberfunktion, die einen Vektor zurückgeben soll. Und zweitens gehört vor den Typ noch die Namespace-Zuordnung:

    class intMenge
    {
    public:
      ...
    private:
      std::vector<int> werte;
    };
    


  • auch das

    cout <<werte(i) << "\n";
    

    sollte wohl durch das ersetzt werden

    cout <<werte[i] << "\n";
    

    da du ja auf ein objekt in dem vector zugreifst (wie in einem eigenen array), und wohl keine funktion aufrufst!



  • Danke für die schnelle Hilfe!

    Ist ja wirklich nur an elementaren Dingen gescheitert 🙄

    übrigens kann ich doch auch statt zb

    werte[i]
    werte.at(i)
    

    schreiben, was mich vor Zugriff auf zu hohe Indizes schützen sollte, oder hat die .at() Funktion irgendwelche unangenehmen Nebenwirkungen?



  • nicht das ich jetzt auf anhieb wüsste!



  • PuppyOnAcid schrieb:

    oder hat die .at() Funktion irgendwelche unangenehmen Nebenwirkungen?

    Ja, sie wirft im Ernstfall eine Exception - also pack deinen Code lieber in ein try-catch.



  • CStoll (off) schrieb:

    PuppyOnAcid schrieb:

    oder hat die .at() Funktion irgendwelche unangenehmen Nebenwirkungen?

    Ja, sie wirft im Ernstfall eine Exception - also pack deinen Code lieber in ein try-catch.

    ist das aber wirkl eine "unangenehme" nebenwirkung?



  • ser1al schrieb:

    ist das aber wirkl eine "unangenehme" nebenwirkung?

    Wenn du damit nicht umgehen kannst - ja 😉


Anmelden zum Antworten