Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

41

28.07.2010, 11:59

Das Problem ist das:

C-/C++-Quelltext

1
2
3
4
class VertexbufferD3D9 : public Vertexbuffer
{
private:
   DeviceD3D9 m_Device;   // <-- das hier

Du kannst kein Objekt von DeviceD3D9 in die Klasse packen, wenn DeviceD3D9 abstrakt ist. Du kannst höchstens einen Pointer darauf in die Klasse VertexbufferD3D9 packen, weil der polymorph wäre. Eine Instanz geht aber nunmal von einer abstrakten Klasse nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

idontknow

unregistriert

42

28.07.2010, 12:07

Irgendwie ging meine Frage nen bisschen unter? :(
Bin mir atm nicht sicher wie ich das lößen soll.

43

28.07.2010, 17:23

Dann hätte ich auch gleich mal ne Frage:

Warum erstellen so viele eine Create Methode in der Klasse, warum das Erstellen nicht im Konstructor übernehmen?

C-/C++-Quelltext

1
2
3
4
5
6
class Device
{
public:
            Device(); //< kA was ich hier mache ...
            void Create(/* parameter */); //< Ich hab dem Konstuctor den Job geklaut!
};

C-/C++-Quelltext

1
2
3
4
while(true)
{
    printf("Schon wieder aufgehangen!?");
}

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

44

28.07.2010, 17:49

Warum erstellen so viele eine Create Methode in der Klasse, warum das Erstellen nicht im Konstructor übernehmen?

Öffentliche Create oder Init Methoden sind ein Designfehler. Wenn man etwas wichtiges machen muss, dann soll das im Konstruktor geschehen und das Objekt sollte somit nach dem erfolgreichen Konstruktor Aufruf konsistent sein.

Ich benutze aber gerne private Init Funktionen, damit ich den für verschiedene Konstruktoren benutzen kann ohne den Code kopieren zu müssen.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

45

28.07.2010, 17:54

Irgendwie ging meine Frage nen bisschen unter? :(
Bin mir atm nicht sicher wie ich das lößen soll.
Ganz einfach: Deine Device-Klasse erzeugt die VertexBuffer. dann kann der Konstruktor intern in der device-Klasse aufgerufen werden und nach aussen hin ist es versteckt. so wäre es zum beispiel sauber.

Zitat

Ich benutze aber gerne private Init Funktionen, damit ich den für verschiedene Konstruktoren benutzen kann ohne den Code kopieren zu müssen.
das ist echt eine der wenigen sachen, die ich in c++ gegenüber anderen sprachen vermisse: aufruf anderer konstruktoren in einem konstruktor...naja shit happens^^

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

46

28.07.2010, 17:59

das ist echt eine der wenigen sachen, die ich in c++ gegenüber anderen sprachen vermisse: aufruf anderer konstruktoren in einem konstruktor...naja shit happens

Ja.. ich (und sehr viele andere) auch. Aber das Problem wird ja bald gelöst. ;)
Yeah!

47

28.07.2010, 18:08

Also sollte ich den ganzen Init Kram in den Konstruktor stecken? Und dann wieder die Device Klasse, im Konstruktur der anderen Klassen stecken, wie z.b. den Vertexbuffer?
Mfg Male

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

48

28.07.2010, 18:48

Also sollte ich den ganzen Init Kram in den Konstruktor stecken?

Prinzipiell ja. Es geht einfach darum, dass der Benutzer deiner Klasse vergessen kann diese Funktion aufzurufen und das vermeidest du, wenn du es im Konstruktor machst. Genau dafür ist er ja schliesslich da.

49

28.07.2010, 19:55

Stimmt auch wieder ^^ Noch ne Frage, der folgende Code würde doch ein Fehler erzeugen?

C-/C++-Quelltext

1
 Device* pDevice = new DeviceD3D9;


Mfg Male

50

28.07.2010, 21:24

sofern der konstruktor von DeviceD3D9 keine parameter hat, ist das so vollkommen in ordnung

Werbeanzeige