Dynamisches Objekt einer Klasse

leon_20v

Erfahrenes Mitglied
Hallo,

ich muss mal wieder zu euch kommen, da ich nicht mehr weiter weiß.

Also die Aufgaube ist die:
Ich soll eine Klasse "Song" erstellen, in die die Namen und Interpreten sowie Musikrichtung eingelesen werden kann.

Jetzt möchte ich mehrere Titel einlesen lassen also so:

HTML:
song1.titel= 
song2.titel=

Ich habe es mit einem array versucht, allerdings sagt er mir immer, die Größe des arrays darf nicht null sein. Dann habe ich mi "cin" eine Zahl in eine Vriable "x" einlesen lassen und folgendes versucht:

PHP:
cin >> x;
Song song[x]; // hier sagt er immer, das es nicht 0 sein darf? ich wollt aber mit cin eine zahl einlesen, das geht schonmal garnicht. wenn ich eine fixe zahl reinschreibe, funktioniert es

for (i=0; i<x; i++) {
     song[i].titel = "xyz"; // titel ist natürlich string


Ich hoffe ihr könnt mir helfen, ich will eben ein mehrere Songs einlesen können.

Danke :)
 
Du musst entweder Container (z.B. std::vector) benutzen oder die Objekte dynamisch erzeugen:
C++:
Song *songs;
cin  >> x;
songs = new Song[x];

for (i=0; i<x; i++)
{ 
     song[i]->titel = "xyz"; // titel ist natürlich string  
}

// WICHTIG!
delete songs;
Falls du sowas noch nicht kennst, würde ich empfehlen mal im Internet nach "Zeigern" oder "dynamische Arrays" zu suchen.
 
okay danke schön :) ich werde es gleich nach dem abendessen versuchen :)

ich habe das eben in einem buch gelesen, aber irgendwie verstehe ich das mit den Zeigern immer noch nicht. "*songs" ist doch ein Zeiger auf die Klasse?

Dann Sage ich Zeiger = neues Objekt [x] oder wie?
 
Nein, *songs ist ein Zeiger auf den Anfang des dynamischen Arrays.

C++:
Song *songs; // Definiere den Zeiger auf den Anfang des Arrays

songs = new Song[x];  // Reserviere Speicherplatz für x Objekte der Klasse Song

PS: Guten Appetit ;)
 
alles klar danke, das hat shconmal funktioniert...

und wie setzte ich einen zeiger auf das ende des array und auf den nächsten neuen freien speicherplatz?
 
Hi.
C++:
songs *letztes;
letztes=songs+(x-1);
songs *freierplatz;
freierplatz=songs+x;
Warum so kompliziert? Und das Element songs+x gibt es nicht... :(
C++:
songs[x-1]; // letztes Element
@leon_v: Du hast da in dem Array bereits x fertig initialisierte Objekte. Wenn du dir merken willst wieviele davon schon von dir initialisiert wurden, mußt du die diesen "Füllstand" noch in einer extra Variablen merken.

Gruß
 
Zuletzt bearbeitet:
Du musst entweder Container (z.B. std::vector) benutzen oder die Objekte dynamisch erzeugen:
C++:
Song *songs;
cin  >> x;
songs = new Song[x];

for (i=0; i<x; i++)
{ 
     song[i]->titel = "xyz"; // titel ist natürlich string  
}

// WICHTIG!
delete songs;
Da ist einiges falsch:
C++:
// FALSCH: song[i]->titel = "xyz";
// songs enthält keine Zeiger
songs[i].titel = "xyz";
C++:
// FALSCH: delete songs;
// songs wurde mit new[] erzeugt
delete[] songs;

Gruß
 
Zuletzt bearbeitet:
@all:
Oh ja ich hatte winiges falsch gemacht, sorry :(
Habe wahrscheinlich schon zu viel PHP gemacht :D
Dadurch vermische öfter mal was wie Zeiger.

@deepthroat: Danke für die Korrektur.
 
Zurück