JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=bb2c446cdcd7883cbdd32cd2608015ffMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

New-Frage

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 21.03.2004, 11:54    Titel: New-Frage Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 21.03.2004, 12:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 21.03.2004, 14:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 21.03.2004, 15:16    Titel: Antworten mit Zitat

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 Wink )

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 21.03.2004, 17:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 21.03.2004, 19:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 21.03.2004, 22:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 22.03.2004, 14:44    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 22.03.2004, 14:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum