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; }; #endifBitte 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
