Vector in Methode


  • Mod

    Sofern das Ding nicht private ist, kannst du es in erbenden Klassen so benutzen, als ob es ein ganz normaler Member wäre. Falls es Doppeldeutigkeiten zwischen mehreren i's geben sollte, kannst du diese mittels Parser::i klar machen, welches du meinst.



  • hm bei mir gehts einfach nicht... wenn ich in der Methode parser::i nutze, gibt er mir -86xxxxxxx aus ... dh. das es nur die Variable ist, die angelegt wurde. Aber in der Methode war diese noch nicht.

    Hier mal mein Code:

    #include <iostream>
    #include <math.h>
    #include <string>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    
    using namespace std;
    
    #define PI 3.14159265
    
    class Parser {	
    public:
    	string checkWhitespaces(string whitespaces);	// Methode wird angelegt - Whitespace löschen
    	bool checkZahl(char wert);						//						 - Auf Zahl prüfen
    	void MainParser(string &daten);
    	vector<double> Zahlen;
    	vector<char> Rechenzeichen;
    	int i;
    
    private:
    	bool h;
    	int c1;
    
    };
    
    class Verarbeiten : public Parser {
    public:
    	double punkt_vor_strich(vector<double> &Z, vector<char> &RZ);
    	double erg_berechnen(vector<double> &Z);
    	double trigo_berechnen(string t1);
    
    private:
    };
    
    void Parser::MainParser(string &t1) {
    
    	int temp = 0;
    	int c2 = 0;
    	h = true;
    	c1 = 0;	
    
    	for(i = 0; i < t1.length(); i++) {
    
    		switch(t1[i]) {
    		//...
    		i++;
    
    		//...
    	   		// wenn hier i = 5 ist, i auch nach der Funktion 5
    			Zahlen.push_back(v.trigo_berechnen(t1)); // Innerhalb der Funktion ist i = -85xxxxxxx	
    		//...
    		} // Switch Ende
    
    	} // for-Schleife Ende
    
    } // MainPraiser Ende
    
    double Verarbeiten::trigo_berechnen(string t1) {
    
    i++;
    
    return trigo_berechnen2;
    }
    


  • Wird i initialisiert?
    Übrigens, wenn nur Parser und Verarbeiten i nutzen kannste es auch protected machen. Aber irgendwie finde ich dein Design komisch.



  • Deklariert in der Parser Klasse und initialisiert in der for-Schleife.



  • Was ist v?
    Jetzt sag nicht ein Objekt vom Typ Verarbeiten...



  • v.trigo_berechnen(t1)

    Das ist v von Verarbeiten. Wenn ich das nicht tue, sagt er mir, es wäre nicht deklariert ...


  • Mod

    VIVUSorg schrieb:

    v.trigo_berechnen(t1)

    Das ist v von Verarbeiten. Wenn ich das nicht tue, sagt er mir, es wäre nicht deklariert ...

    Das ist wieder das gleiche wie vorher mit dem p. Du legst wild und ohne Plan Objekte an, weil der Compiler meckert, ohne zu verstehen, warum er meckert. Das v hat mit deinem aktuellen Objekt nichts zu tun.

    Dein Design ist wirklich sehr komisch.



  • Solange das Design nur komisch ist, aber funktioniert, macht das nichts 🙂

    Wie kann ich dem Compiler denn sagen, dass die Funktion deklariert ist?

    Ich habe jetzt nur noch in der main() Parser p; und Verarbeiten v; oder kann ich hier auch durch das vererben Parser p; weglassen?



  • ...



  • VIVUSorg schrieb:

    Solange das Design nur komisch ist, aber funktioniert, macht das nichts 🙂

    Funktioniert aber nicht.



  • In der main() habe ich Parser p; und Verarbeiten v; und sonst habe ich keine neuen Objekte erstellt.

    Wie soll ich denen dann die Methode in der MainParser Methode aufrufen? Hängt das mit der Vererbung zusammen? Oder sind in der Main zu viele Objekte erstellt? In welche Richtung soll ich nachlesen? Ich muss/will ja im Prinzip eine Basis Methode in einer Methode der Oberklasse nutzen.

    // Edit: Stimmt, funktionieren tuts leider nicht. Du könntest mir aber sagen, was du mit komisch meinst. Nur komisch ist ziemlich schwer zu interpretieren...



  • VIVUSorg schrieb:

    In der main() habe ich Parser p; und Verarbeiten v; und sonst habe ich keine neuen Objekte erstellt.

    Und woher kommt dann v in der Memberfunktion?

    Wie soll ich denen dann die Methode in der MainParser Methode aufrufen?

    (pure) virtual Memberfunctions

    Hängt das mit der Vererbung zusammen?

    Jein.

    Oder sind in der Main zu viele Objekte erstellt?

    Ja.

    In welche Richtung soll ich nachlesen?

    Im Forum ist ein Thread über die Bücher, Link dazu in SeppJs Signatur.

    Ich muss/will ja im Prinzip eine Basis Methode in einer Methode der Oberklasse nutzen.

    Basis und Oberklasse ist idR dasselbe.

    Du könntest mir aber sagen, was du mit komisch meinst. Nur komisch ist ziemlich schwer zu interpretieren...

    Angefangen mit:
    Verarbeiten ist nicht Parser.
    Wurstbrot ist Supermarkt, aber Verarbeiten ist nicht Parser.


  • Mod

    VIVUSorg schrieb:

    // Edit: Stimmt, funktionieren tuts leider nicht. Du könntest mir aber sagen, was du mit komisch meinst. Nur komisch ist ziemlich schwer zu interpretieren...

    Das war eigentlich die höfliche Art zu sagen "totaler Mist". Da wollte ich mal einmal nicht so negativ sein und schon kommt es auch falsch an.



  • Anstelle von Verarbeiten hätte ich auch Executor nehmen können 🙂 Und Verarbeiten ist nicht Parser ist klar, wollte ich auch nicht nutzen, falls ich das getan hab 🙂

    Im Grunde wollte ich das zerflücken und das anschließende weiterverarbeiten in zwei klassen trennen. Um voran zu kommen, werde ich die Methode aber in Parser stecken... und erstmal abwarten, bis Vererbung in der Vorlesung an die Reihe kommt 🙂 Ich weiß, der einfache Weg ist nicht immer der Beste...


  • Mod

    VIVUSorg schrieb:

    Anstelle von Verarbeiten hätte ich auch Executor nehmen können 🙂 Und Verarbeiten ist nicht Parser ist klar, wollte ich auch nicht nutzen, falls ich das getan hab 🙂

    Genau das hast du aber getan, denn diese Beziehung wird durch die (public) Vererbung ausgedrückt. Das Beispiel von Nathan mit dem Wurstbrot und dem Supermarkt ist ein Beispiel aus dem schrecklich schlechten Lehrbuch "C++ von A bis Z", dessen Autor (J. Wolf) ebenfalls Vererbung nicht kapiert hat. Der ist hier so eine Art Forenlegende, da fast alle dummen Fragen (ja, die gibt es) hier im Forum darauf zurückgehen, dass der Fragesteller eines seiner Bücher gelesen hat.



  • VIVUSorg schrieb:

    Anstelle von Verarbeiten hätte ich auch Executor nehmen können 🙂 Und Verarbeiten ist nicht Parser ist klar, wollte ich auch nicht nutzen, falls ich das getan hab 🙂

    Im Grunde wollte ich das zerflücken und das anschließende weiterverarbeiten in zwei klassen trennen. Um voran zu kommen, werde ich die Methode aber in Parser stecken... und erstmal abwarten, bis Vererbung in der Vorlesung an die Reihe kommt 🙂 Ich weiß, der einfache Weg ist nicht immer der Beste...

    Es ist auch nicht der einfachste Weg.
    Der einfachste Weg wäre ein freie Funktion.
    Vererbung steht für eine "ist ein" Beziehung. In deinem Fall heißt das: Verarbeiten ist ein Parser. Das ist genauso falsch wie Executor ist ein Parser.
    OOP-Design ist nicht irgendwie irgendwas hinklatschen, hauptsache du hast Polymorphie. OOP-Design ist Planung pur.


Anmelden zum Antworten