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
-
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

-
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
-
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.