Array mit new Dringend!!!
-
Hi,
ich würde gerne Folgendes machen:
Geht das bei C++? Bei meiner Umgebung(root-interpreter)
gehts irgendwie nicht oder ich habe was falsch gemacht.int* meinint[]={ new int, new int};Dabei entsteht folgender Fehler:
Symbol newint is not defined in current scope (tmpfile):1:
Ich möchte halt ungern das Ganze über einzelne Zeilen zuweisen sondern direkt bei der Initialisierung
Vielen Dank für die (schnelle) Hilfe.
-
int arr [] = { 5, 4 }; // geht, das hinten müssen afaik literale sein, das können deine new int niemals seinEdit: Achtung, ist falsch. Dahinter müssen keine Literale stehen.
Wenn du wirklich unbedingt Pointer auf integers brauchst, dann:
int* arr [2]; for(int i = 0; i < 2; ++i) arr[i] = new int; // nicht vergessen irgendwo auch wieder: for(int i = 0; i < 2; ++i) delete arr[i];MfG SideWinder
-
Danke schon einmal.
Das Beispiel mit int war vielleicht etwas ungünstig.
Statt int benutze ich eine eigene Klasse.
Ich möchte also ein Array aus Zeigern auf diese Klasse erstellen.
Da ich es optisch nicht so toll finde und auch nicht immer nachzählen möchte, wieviele Zeiger ich habe, würde es gerne so machen.meineKlasse * array[]={new meineKlasse("dateiort",13,14), new meineKlasse("dateiort2",15,16), }
-
schnab schrieb:
int* meinint[]={ new int, new int};Dabei entsteht folgender Fehler:
Symbol newint is not defined in current scope (tmpfile):1:
Sieht alles legal aus! Deine Fehlermeldung macht dich auch auf etwas anderes aufmerksam ->newint (?), Leerzeichen vergessen ?
schnab schrieb:
Danke schon einmal.
Das Beispiel mit int war vielleicht etwas ungünstig.
Statt int benutze ich eine eigene Klasse.
Ich möchte also ein Array aus Zeigern auf diese Klasse erstellen.
Da ich es optisch nicht so toll finde und auch nicht immer nachzählen möchte, wieviele Zeiger ich habe, würde es gerne so machen.meineKlasse * array[]={new meineKlasse("dateiort",13,14), new meineKlasse("dateiort2",15,16), }Kompilierbares Beispiel bitte, das hier einen Fehler verursacht ...
-
Das sollte eigentlich funktionieren. Die Initialisierer müssen natürlich keine Literale sein. Kann sein, dass der Interpreter sich da nicht standardkonform verhält. Ich würde mir ja die Mühe machen und testen, aber im Moment scheint die
Schon mal daran gedacht statt eines Arrays eine Container-Klasse zu verwenden? Z.B. vector:
std::vector<meineKlasse*> myVectorArray; myVectorArray.push_back(new meineKlasse("dateiort",13,14)); myVectorArray.push_back(new meineKlasse("dateiort2",15,16));Sieht optisch doch auch nicht so schlecht aus, oder? Und dank der vielen Funktionen von vector brauchst du auch nichts zählen.

-
Der Satz "Ich würde mir ja die Mühe machen und testen, aber im Moment scheint die" geht mit "Seite unten zu sein." weiter und war sowieso nur rhetorisch gemeint um Hilfsbereitschaft vorzutäuschen.

-
Mitleid schrieb:
Schon mal daran gedacht statt eines Arrays eine Container-Klasse zu verwenden? Z.B. vector:
std::vector<meineKlasse*> myVectorArray; myVectorArray.push_back(new meineKlasse("dateiort",13,14)); myVectorArray.push_back(new meineKlasse("dateiort2",15,16));Was soll dieser Ratschlag?
-
volkard schrieb:
Was soll dieser Ratschlag?
Hast Recht, er will ja nicht über einzelne Zeilen zuweisen usw. ... Hab seine Vorgaben zwar gelesen aber dann doch vergessen. Mein Fehler!

-
So, hab mir das Ding dann doch mal angesehen. Mein erster C/CPP "Interpreter".

Sieht aus als versteht ROOT nur die Syntax bei dieser Initialisierung nicht. Egal was man dort eingibt, die Leerzeichen werden entfernt. Klammert man stürzt das Ding ab. Seltsam.
Workaround könnte eine Funktion sein, die das Objekt anlegt. Also:
meineKlasse* foo(std::string s, int i, int j) { return new meineKlasse(s,i,j); } // ... und dann eben meineKlasse * array[]={foo("dateiort",13,14), foo("dateiort2",15,16)}Statt string könnte foo auch char* akzeptieren.
Jedenfalls schluckt ROOT das so.