Arrayeingabe überschreibt alle Werte! ?
-
Hallo, ich bin relativer C++ Anfänger und lerne es erst sein 1,5 Jahre.
Nachdem ich mich das letzte Jahr mit Consolen Anwendungen Rumgeschlagen habe,
probiere ich es nun mal mit ein paar Windows Forms anwendungen von .NET
Ist eigentlich auch nicht das Problem.Mein Problem liegt bei einem Array.
Dort überschreibt immer die letzte eingabe den kompletten
inhalt.Ich habe 2 Klassen (abgesehn von den Forms), liga und manschaft.
In der Liga Klasse hab ich unterandem die Methode:
void liga::addMannschaft(mannschaft* a) { mannschaft* test100; test100->setName("Mannschaft1"); mannschaften[0] = test100; mannschaft* test101; test101->setName("Mannschaft2"); mannschaften[1] = test101; /*mannschaften[anzahl] = a; anzahl++;*/ mannschaft* b = mannschaften[0]; //<-- sollte Mannschaft 1 sein ist aber Mannschaft 2 MessageBox::Show(b->getName()); mannschaft* c = mannschaften[1]; //<-- sollte Mannschaft 2 sein MessageBox::Show(c->getName()); }
die Headerdatei dazu sieht so aus:
#pragma once using namespace System; #include "mannschaft.h" namespace mannschaft { public __gc class liga : public System::Windows::Forms::Form { private: static mannschaft* mannschaften[] = __gc new mannschaft*[255]; static Int32 anzahl = 0; public: liga(void); ~liga(void); void addMannschaft(mannschaft* a); mannschaft* getMannschaft(Int32 a); __property Int32 get_Anzahl() { return anzahl; } }; }
meine mannschaften Header datei sieht so aus:
#pragma once using namespace System; using namespace System::Windows::Forms; //for Debug: MessageBox::Show(STRING); namespace mannschaft { public __gc class mannschaft { private: static String* teamname; public: mannschaft(void); ~mannschaft(void); void setName(String* a) { teamname=a; }; String* getName() { return teamname; }; }; }
Ich hab hier Mannschaft Klasse mit reinkopiert weil ich meine das es
vieleicht an dieser Liegen könne. Ich habe meinen Array nämlich unter
anderem auch mit einem Strin getestet und da funktioniert er einwandfrei
nur sobald ich das ganze mit der Klasse mache wird immer der komplette
Array Inhalt mit dem letzten wert überschrieben.Kann mir da jemand helfen?
-
teamname ist static... desshalb auch dieselbe instanz.
-
wenn ich das static rausmache bricht das programm bei setName ab.
namespace mannschaft { public __gc class mannschaft { private: String* teamname; public: mannschaft(void); ~mannschaft(void); void setName(String* a) { teamname = a; }; //<-- Hier String* getName() { return teamname; }; }; }
-
Ja, weils keine Instanz gibt, sondern nur ein Pointer.
Ich würde die Unterschiede zwischen Objekten / Klassen nochmals verdeutlichen.Eine Variable (o.ä.) static zu machen ist oft der Versuch Verständnis- Schwierigkeiten im Bereich Objekte / Klassen wettzumachen. Leider ist dies der falsche Weg.
Btw.: Was ist das eigentlich für eine Syntax, C++ Managed Extensions? Wenn ja, C++ Managed Extension ist veraltetd. Neu ist C++/CLI (ist ja auch das Forum hierfür).