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

1

20.09.2011, 19:51

Mehrfachinitialisierung/Neudefinition mehrerer Variablen

Ich habe eine Heider-Datei, main.h.
In dieser Datei habe ich alle globalen Variablen in einem Namensbereich (var) definiert.
Für jede Variable bekomme ich folgenden gleichen Fehler:

Quellcode

1
2
1>c:\users\MisterX\documents\visual studio 2010\projects\0001\0001\main.h(27): error C2374: 'var::g_fTime': Neudefinition; Mehrfachinitialisierung
1>          c:\users\MisterX\documents\visual studio 2010\projects\0001\0001\main.h(27): Siehe Deklaration von 'var::g_fTime'

Weiß jemand warum? Alle Variablen wurden nur einmal deklariert, ich habe alle Dateien durchsuchen lassen

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

20.09.2011, 20:07

Ganz schlechtes Design.
1. keine globalen Variablen benutzen
2. wenn schon, dann im Header nur deklarieren (mit "extern") und in einer einzigen .cpp-Datei definieren. Ansonsten würde jede .cpp-Datei, die Deinen Header einbindet, eine eigene Variable erzeugen, und diese kollidieren dann.

3

20.09.2011, 21:00

Wie ist das dann mit Makros?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

20.09.2011, 21:01

Abgesehen von Headerguards und Steuerung von Kompilierungsprozessen nicht verwenden.

5

20.09.2011, 21:07

Genau dafür hab ich die ja. Halt für Headerguards und solchen Sachen:

C-/C++-Quelltext

1
#define SAFE_DELETE(x) if(x){delete x; x=NULL;}


Heißt eine *.cpp anlegen mit Variablen mit Schlüsselwort extern. Die Makros bleiben in der main.h?


//Edit: Gelöst. :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MisterX« (20.09.2011, 21:41)


BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

6

20.09.2011, 21:42

Makros sind ab Definition in allen folgenden Dateien sichtbar. Deshalb sollte man so wenig wie möglich von ihnen benutzen (nur für Dinge, die wirklich global sein sollen wie M_PI).

Gewöhne dir an, so wenig globale Variablen zu nutzen, wie möglich. Du soltest alle Variablen in Klassen und Strukturen kapseln. Die Instanzen dieser Klassen kannst du an alle Funktionen übergeben, die wirklich Zugriff auf deine sonst globalen Daten brauchen. So verlierst du nicht den Überblick über deine Variablen und verursachst keine Namenskonflikte.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

20.09.2011, 23:19

Den Sinn eines SAFE_DELETE(x) würd ich nochmal überdenken. Zumindest solltest du eine inline Funktion statt eines Makros benutzen. Die Überprüfung ob x == 0 ist, ist in jedem Fall sinnlos, da delete 0; per Definition einfach nichts tut.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (20.09.2011, 23:32)


DarioFrodo

Treue Seele

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

8

22.09.2011, 08:13

Bei mir tut delete 0 etwas...
er verursacht nämlich eine Zugriffsverletzung...
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

22.09.2011, 08:18

Hast Du das mal ausprobiert?

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

10

22.09.2011, 09:00

Bei mir tut delete 0 etwas...
er verursacht nämlich eine Zugriffsverletzung...
Scheisse, dein PC ist defekt. Kauf dir sofort einen neuen!

Werbeanzeige