Vektorelement von Objekt mit arrays wird Funktion übergeben und 0tes Element des Arrays ist fehlerhaft
-
Hallo,
ich bin auf folgendes komisches Problem gestoßen:
Ich habe einen Vektor V von einer Klasse A. Die Klasse A hat eine Membervariable b, die ein Feld fester größe ist.class A { double b[100]; }Nun hatte ich eine Funktion aufgerufen, die ein Element dieses Vektors übernimmt:
B::Funktion(A a) { cout<<a.b[0]<<"\n"; cout<<a.b[1]<<"\n"; } ... //Aufruf : B b; vector<A> V; ... b.Funktion(V[x]);Diese lieferte für das 0te Element 0 (also nicht das 0te Element, sondern Unfug) und für des 1te Elemente das 1te Element des Feldes des eingegebenen Objekts, so wie es sein soll.
Als ich die Funktion so umgeschrieben habe, dass ich nicht den Vektor, sondern eine Referenz des Vektors benutzt habe...B::Funktion(A& a) {...} ...und sonst alles gleich blieb, wurde auch das 0te Element richtig übergeben, was das Problem erstmal gelöst hat. Ich versteh nur nicht, wieso die ursprüngliche Variante nicht geht.
In dem Objekt stehen noch mehrere andere Felder und auch bei denen passiert das gleiche mit dem 0ten Element, während der Rest ordentlich übergeben wird.
-
class A { public: A() { b[0] = 1.23; b[1] = 3.45; } double b[100]; }; void f(A a) { std::cout<< a.b[0]<<"\n"; std::cout<< a.b[1]<<"\n"; } int main() { using namespace std; vector<A> V(4); f(V[0]); f(V[1]); f(V[2]); cin.get(); return 0; }Ausgabe
1.23
3.45
1.23
3.45
1.23
3.45???
-
Ok, Vielen Dank für die schnelle Antwort!!!
Dann scheint das vermutlich nicht daran zu liegen.
Bleibt für mich die nächste Frage, ob ich nicht irgendwoanders noch einen unentdeckten Bug hab, der das Problem erzeugt...aber das würde jetzt zu lang werden, da versuch ichs erstmal selbst..Danke nochmal!
-
Hab den Fehler gefunden, beim überladen des =-Operators für die Klasse A hab ich meine Schleife für die Kopie des Felds völlig unverständlicherweise erst ab dem 1sten Element loslaufen lassen.
Da war ich also doch etwas voreilig mit dem Posten des Problems, Sorry!