Vector als Klassenparameter
-
Moin!
Ich rufe zuerst die "manuel" auf und dann "print_vec".
Aber "print_vec" gibt mir nichts aus.
Sieht jemand meinen Fehler?
#include "header.h" class gauss{ public: gauss(); ~gauss(); void print_vec(); void input_vec(int i); void clear(); void erase(unsigned int ui); void manuel(); void start(); void set_m(unsigned int ui); void set_n(unsigned int ui); protected: private: std::vector<int> vec; unsigned int n; unsigned int m; };#include "gauss.h" gauss::gauss() { } gauss::~gauss() { } void gauss::print_vec() { for (auto x: gauss::vec) { std::cout << ' ' << x; } std::cout << '\n'; } void gauss::input_vec(int i) { auto it = vec.begin(); it = gauss::vec.insert(it, i); } void gauss::clear() { gauss::vec.clear(); } void gauss::erase(unsigned int i) { if(vec.size()>=i) { std::cerr << "size is " << vec.size() << std::endl; gauss::vec.erase(gauss::vec.begin()+i,gauss::vec.begin()+i); } else { std::cerr << "error, size is " << vec.size() << " - erase of index " << i << std::endl; } } void gauss::manuel() { unsigned int itmpA=0; unsigned int itmpB=0; unsigned int n=0; unsigned int m=0; int in=0; gauss abc; std::cout << "index of line - m - "; cin >> m; std::cout << "number of line - n - "; cin >> n; gauss::set_m(m); gauss::set_n(n); for(itmpA=0; itmpA<n; itmpA++) { for(itmpB=0; itmpB<m; itmpB++) { std::cout << itmpA << " " << itmpB << " : "; cin >> in; abc.input_vec(in); } } } void gauss::start() { gauss::print_vec(); } void gauss::set_n(unsigned int ui) { gauss::n=ui; } void gauss::set_m(unsigned int ui) { gauss::m=ui; }Danke
-
ich komme nicht ganz mit dieser zeile klar..
for (auto x: gauss::vec) {Sach mal etwas dazu ...

-
Moppsie schrieb:
ich komme nicht ganz mit dieser zeile klar..
for (auto x: gauss::vec) {Sach mal etwas dazu ...

Das ist eine Range-Based For Schleife, oder auch foreach Schleife genannt. Das einzige ungewöhnliche dadran ist, dass das vec Attribut mit Klassennamen angesprochen wird. Aber sonst ist das ok.
-
gauss abc; . . . abc.input_vec(in);Das wird eher nicht das Gewünschte tun.
-
Mehrere Kommentare:
1. Du hast und irgendwo ein "using namespace std;" vorenthalten, sonst würde
cinnicht kompilieren. Hoffentlich nicht in deinem "header.h"!2. Fehler ist in gauss::manuel: wozu erzeugst du innerhalb dieser Funktion das neue Objekt "abc"? Ich schätze, du möchstest "
gauss abc;" und "abc." von "abc.input_vec(in);" einfach weglassen.3. Warum schreibst du innerhalb der Klasse ständig
gaus::, zum Beispiel infor (auto x: gauss::vec)?4. Was soll die Klasse eigentlich tun? Gauss klingt mir nach allem möglichen, aber nicht danach, dass ich irgendwie Zahlen eingeben soll.
5. Wenn deine Konstruktoren/Destruktoren eh leer sind, warum lässt du sie dann nicht weg oder schreibst explizit
gauss() = default;?6. std::vector ist nicht dafür bekannt, bei insert am Anfang besonders schnell zu sein... (was soll dein
input_vecmachen - am Anfang eine Zahl einfügen?!)7. dein erase ist komisch:
gauss::vec.erase(gauss::vec.begin()+i,gauss::vec.begin()+i);Iteratorpaare sind bei sowas immer halboffen, d.h. hier wird nix gelöscht! Außerdem lass die gauss:: weg!
(was soll das werden: ein Wrapper um einenstd::vectorherum?)
-
Dass
klassenname::nichtstatischevariablefunktioniert wusste ich nicht!
Danke für den Thread.
-
Ah, da erinner ich mich, dass sowas wie
this->baseclass::somewhatimmer funktioniert hat.
Also kannte ich das doch von irgendwo.
Einen schönen Schlaf wünsch ich noch.