|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 21.03.2004, 11:54 Titel: New-Frage |
|
|
Haltet mich für dämlich, blind oder für was auch immer, aber ich kriege es echt nicht gebacken, ein Array von einem Objekt anzulegen.
Das Objekt um das es hier geht, ist eine Klasse - genauer gesagt, eine abstrakte Basisklasse die nur einen Konstruktor (und zwar mit Parameter!) hat.
Also:
Code: |
class GrafikObjekt
{
protected:
HWND m_hWnd;
public:
GrafikObjekt(HWND hWnd);
virtual void Draw(HDC hDC)=0;
};
| (es gibt noch weitere Funktionen und Variablen, die hier aber nichts zur Sache tun)
Von dieser Basisklasse werden einige Klassen abgeleitet, die später den Inhalt des Arrays bilden sollen.
Das Array ist nun wiederum eine Variable einer Klasse:
Code: |
// Hauptklasse.h
class Hauptklasse
{
private:
static GrafikObjekt *m_GrfxObj; // Es ist schon richtig, dass es static ist!
// tut hier nichts zur sache
...
}
// Hauptklasse.cpp
GrafikObjekt Hauptklasse::*m_GrfxOjj=NULL;
...
void HauptKlasse::IrgendeineFunktion()
{
...
m_GrfxObj=new GrafikObjekt[3]; // Um Diese Codezeile geht es!
...
}
|
So Klappt das ganze Nicht, aber wie muss es denn dann allokiert werden?
PS.: Ich benötige den Parameter im Konstruktor - und er kann auch nicht mit einem Standardwert vorbelegt werden. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 21.03.2004, 12:53 Titel: |
|
|
Das Problem hatte ich auch mal, eine Klasse mit nur einem Konstruktor mit Parameter... Ich hab es auch net hingekriegt, und dann einen Standard-konstruktor ohne Parameter gemacht + eine Methode zum Initialisieren, die halt nach dem Erstellen des Arrays in einer Schleife bei allen Objekten aufgerufen wird ... |
|
Nach oben |
|
|
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
Verfasst am: 21.03.2004, 14:52 Titel: |
|
|
ich mein, so wie du es geschrieben hast, legst du deine objekte mit dem standardkonstruktor (ohne parameter) an, den du halt nicht definiert hast. _________________ Schau mir in die Augen, Kleines. |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 21.03.2004, 15:16 Titel: |
|
|
oh ja, das Problem hatte ich vor kurzem auch.
zunächst brauchst du einen Standardkonstruktor, da dieser bei
Code: | m_GrfxObj=new GrafikObjekt[3]; // Um Diese Codezeile geht es!
| aufgerufen wird. Nun hast du prinzipiell zwei Möglichkeiten:
1) du machst aus deinem momentanen Konstruktor eine Init-Methode
2) du weist dem Array nach dem Erstellen neue Werte zu (dabei Überladen des Zuweisungsoperators nciht vergessen, muss ich dir aber wohl kaum noch erkären )
Code: | for(unsigned int i=0; i<ANZAHL_ELEMENTE; i++)
{
// Methode 1: init-Methode
m_GrfxObj[i].init(parameter1);
// Methode 2: Zuweisung über Parameter-Konstruktor
m_GrfxObj[i] = m_GrfxObj(parameter1);
} |
viele Grüße
Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 21.03.2004, 17:49 Titel: |
|
|
Wie ich das sehe hast du nichtmal von der Abstarkten Klasse eine Abgeleitete gemacht, und wenn ich mich nichtn irre sollte man abstrakte Klassen gar nicht nutzen. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 21.03.2004, 19:10 Titel: |
|
|
Naja, erstens geht es nicht, da kein Standardkonstruktor vorhanden ist und zweitens, weil keine Abstrakte Klasse instantiiert werden kann. Man könnte es so ändern:
Code: |
class GrafikObjekt
{
protected:
HWND m_hWnd;
public:
GrafikObjekt();
GrafikObjekt(HWND hWnd);
virtual void Draw(HDC hDC)=0;
};
class Hauptklasse
{
private:
static GrafikObjekt** m_GrfxObj;
public:
void init(void)
{
m_GrfxObj=new GrafikObjekt*[3];
}
void Set(int index, GrafikObject* obj)
{
m_GrfxObj[index] = obj;
}
};
GrafikObjekt** Hauptklasse::m_GrfxObj=NULL;
|
C. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 21.03.2004, 22:41 Titel: |
|
|
Ja das hatte ich im Chat auch schon vorgeschlagen aber AFE hat gemeint, dass das aus irgendeinem Grund auch nicht geht... _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 22.03.2004, 14:44 Titel: |
|
|
@Hazel: Nicht so ganz. Ich sagte, dass ich es nicht so machen wollte.
@Christian: Habe das Problem gelöst - siehe Mail.
@all: Soll dass heissen, dass ich kein Array von Objekten anlegen kann, die alle eine gemeinsame Basisklasse haben? _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 22.03.2004, 14:53 Titel: |
|
|
Nur abstrakte Klassen bereiten Probleme wenn deine basisklasse allerdings nicht abstrakt ist dann sollte es funzen. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|