Konstruktor



  • Ich habe eine Frage:

    Im Konstruktor fülle ich die Vektoren mit Daten aus einem Textfile mit unbestimmter Länge.
    Danach brauche ich die Länge des Vektors, um den Mittelwert usw. zu berechnen.

    Der Konstruktor sieht so aus:

    vector <double> v1;
    vector <double> v2;
    vector <double> v3;
    vector <double> v4;
    
    Winding::Winding()
    {
    	ifstream Windung ("windung_m0test.txt");
    
    	if (Windung.is_open())
    	{
    		for (double first, second, third, fourth; 
    			  Windung >> first >> second >> third >> fourth; 
    			  v1.push_back(first), v2.push_back(second), v3.push_back(third), v4.push_back(fourth));
    
    		Windung.close();
    	}
    	else
    	{
    		cerr << "Unable to open file";
    	}
    }
    

    Mit

    v1.size()
    

    habe ich versucht die Vektorlänge auszugeben. Also mit diesem Wert weiterzurechnen. Aber obwohl der Vektor nur 29 Einträge hat, gibt er mir 58 an.

    Was mache ich falsch? 😕
    (liegt es daran, dass ich im main() den Konstruktor zweimal aufrufe??)

    int main ()
    {
    	double m = 0;
    
    	Winding();
    	Winding loop;
    	loop.mean_winding(m);
    return 0;
    }
    

    Das Textfile sieht so aus:
    1 0 0 0
    0 1 0 0
    0 0 0 1
    1 0 0 0
    1 0 0 0
    usw.

    Danke
    Nijntje


  • Mod

    nijntje schrieb:

    Mit

    v1.size()
    

    habe ich versucht die Vektorlänge auszugeben. Also mit diesem Wert weiterzurechnen. Aber obwohl der Vektor nur 29 Einträge hat, gibt er mir 58 an.

    Und woher weißt du so genau, dass du nur 29 Einträge hast, obwohl der vector doch 58 meldet?

    Deine Zeile 5 in der main macht übrigens nicht das was du denkst. Lass sie einfach weg.

    P.S.: Ich hoffe mal, dass die globalen vectoren hier nur Schreibfaulheit sind und die in Wirklichkeit Klassenmember sind. Ansonsten habe ich hiermit gerade dein Problem gefunden.



  • Ja, da liegt wohl der Fehler.
    kannst du mir das genauer erklären?

    Ich arbeite das erste Mal mit Vektoren und wollte diese ja auch in die Klasse schreiben, aber da bekomme ich immer Fehlermeldungen wie:

    error: ISO C++ forbids declaration of 'vector' with no type

    Deshalb habe ich sie global deklariert. Darf man nicht, oder?
    Wie deklariere ich diese Vektoren nun korrekt?

    Und muss man nicht den Konstruktor aufrufen, wenn er wie hier Vektoren initialisiert?

    Danke für die schnelle Antwort 🙂


  • Mod

    Na, wenn du sie global machst, dann wird bei jedem Konstruktoraufruf was angehängt. Da du insgesamt zwei Mal den Konstruktor aufgerufen hast, hattest du alles doppelt. Doktor aber nicht daran rum, mach das unbedingt gleich richtig!

    Die Fehlermeldung deutet darauf hin, dass du ein #include<vector> vergessen hast und/oder das std:: vor dem vector vergessen hast. Falls es damit nicht funktionieren sollte, dann melde dich noch einmal.

    Guck dir übrigens mal an, was der Destruktor eines ifstreams macht und was das für deine Zeile 16 bedeutet.



  • super danke, läuft...

    Nein, ich weiss nicht genau, was der Destruktor macht in Zeile 16.
    Eigentlich wäre der Aufruf gar nicht nötig, oder?

    Werde mir das noch genauer anschauen.

    Nochmals danke
    Lg
    nijntje


  • Mod

    nijntje schrieb:

    Nein, ich weiss nicht genau, was der Destruktor macht in Zeile 16.

    Zeile 16 ist nicht der Destruktoraufruf. Der kommt in Zeile 22.

    Eigentlich wäre der Aufruf gar nicht nötig, oder?

    So ist es.


Anmelden zum Antworten