PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Objekt-Array, Zugriff auf Objekte, C++



Nuke
17-10-2004, 16:48
Hi.

Ich versuche gerade eine Schwarm-Simulation zu programmieren.

Da der Anwender die Anzahl der Schwärmlinge eingeben können soll, brauche ich ja ein dynamisches Array. Jeder Schwärmling ist dabei ein Objekt von meiner Klasse KSchwarm. Diese enhält erst mal nur Positionsinformationen, welche man auslesen und setzen kann.

Wie lege ich jetzt ein Array von dem Objekt an? Das Objekt befindet sich wiederum in einem Objekt, soll aber nicht weiter nach außen. D.h. Klasse KSchwarm gibt es nur für die Klasse KFeld.

Ich bekomme den Fehler:
error: base operand of `->' has non-pointer type `KSchwarm'

Hier mal ein Code-Auszug (Klasse ein bisschen gekürzt). Irgendwie habe ich gerade einen Blackout. ;)



class KFeld
{
private:
KSchwarm *Boid;

public:
KFeld();
~KFeld();
void erzeugeSchwarm(int anz);
void entferneSchwarm();
};

KFeld::~KFeld()
{
delete[] Boid;
}
void KFeld::erzeugeSchwarm(int anz)
{
Boid = new KSchwarm[anz];
for(int i=0;i<anz;i++)
{
//Hier der Fehler:
Boid[i]->setzePosition((float)(rand()%hoehe),(float)(rand() %breite));
}
}
void KFeld::entferneSchwarm()
{
delete[] Boid;
}


Kann mir bitte einer sagen was ich falsch mache? :o

Danke. :)

anda_skoa
17-10-2004, 16:56
Boid ist ein Array von KSchwarm Instanzen, nicht KSchwarm Pointern.

Korrekt ist also


Boid[index].methode();


Ciao,
_

Nuke
17-10-2004, 17:07
*anDenKopfKlatsch*

Man bin ich blöd... Klar. Stimmt.

Wie ist das dann mit dem Löschen? Ist das OK so, mit "delete[] Boid"?

anda_skoa
17-10-2004, 18:23
Ja, da ist so korrekt, du hast ja zum Erzeugen new[] benutzt.

Ciao,
_