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.


  • Mod

    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 cin nicht 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 in for (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_vec machen - 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 einen std::vector herum?)



  • Dass klassenname::nichtstatischevariable funktioniert wusste ich nicht!
    Danke für den Thread.



  • Ah, da erinner ich mich, dass sowas wie this->baseclass::somewhat immer funktioniert hat.
    Also kannte ich das doch von irgendwo.
    Einen schönen Schlaf wünsch ich noch.


Anmelden zum Antworten