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

11

13.12.2009, 13:24

sehr seltsam, kommentiere ich diese Zeile aus:

C-/C++-Quelltext

1
if(DoConfigWindow(&config) != NE_OK) return 0; 

kommt der Fehler nicht.

Die Funktion hat eigentlich nichts mit der Klasse zu tun, außer dass sie auch ein Direct3d Objekt erzeugt, welches aber beim verlassen wieder released wird.

EDIT:
Fast alle Klassen erben von CEngine, um auf das EngineLog zuzugreifen.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
CEngine* CEngine::Instance()
{
    if(instance == NULL) instance = new CEngine;
    return instance;
}

neResult CEngine::Init()
{
    EngineLog.Create("EngineLog.html", "EngineLog");
    initialized = true;
    return NE_OK;
}


viel macht das nicht

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

12

13.12.2009, 13:39

Du machst irgendwas undefniertes. Darum kann es passieren, dass man auch eine unnötige Stelle auskommentieren kann und es plötzlich geht. (undefiniert halt)..

Benutz in CEngine ebenfalls mal das Meyers Singleton.

Und schau mal mit dem Debugger nach. instance ist wahrscheinlich 0 und wenn ja, dann liegt es an dem oben genannten Problem mit den Übersetzungseinheiten.

13

13.12.2009, 21:40

Das Problem an globalen Variablen (und statischen Klassenattributen) ist einfach, das man nicht so genau weiß, in welcher Reihenfolge sie gelöscht und erstellt werden.
ich meine mich zu erinnern, dass statische Variablen in Funktionen genau beim ersten Aufruf der Funktion erstellt werden (weshalb das Meyer Singleton auch besser ist), aber generell solltest du gucken, ob du nicht auch ohne auskommst. (Es ist eben doof, wenn 2 Objekte im Konstruktor oder Destruktor sich gegenseitig benutzen und man nicht steuern kann, welches zuerst erstellt oder gelöscht wird).
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige