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

dbGAMES

Treue Seele

Beiträge: 323

Wohnort: Frankfurt

Beruf: Student

  • Private Nachricht senden

11

21.02.2006, 19:27

damit das programm in den anderen dateien diese variablen findet, sind sie in dem header drinnen. aber richtig definiert werden sie ja in einer cpp datei. das in der header datei ist sozusagen nur ein verweis darauf dass es diese variablen woanders gibt.

JossBoss

Treue Seele

  • »JossBoss« ist der Autor dieses Themas

Beiträge: 182

Wohnort: Luxemburg

  • Private Nachricht senden

12

21.02.2006, 19:35

ja aber die extern deklaration könnte man doch sein alssen.. man bindet die klasse ja als header ein, dann könnte man doch einfach ein objekt davon erstellen...,

meine theorie:
wenn man sie einfach als globale variable erstellt, dann kann man sie nur in der in der CBreakanoid.cpp benutzen, aber wenn sie extern ist, kann man sie auch in anderen dateien nutzen...
aber:
weshalb schreibt man :

C-/C++-Quelltext

1
extern CBreakanoid *g_pBreakanoid;
in der header,
und dann noch mal

C-/C++-Quelltext

1
CBreakanoid *g_Breakanoid=0;

in der cpp datei??

weshalb reicht die 1. definition oder deklaration nicht einfach?
#
mfg :huhu: :huhu:
Gratis Tools+Software und Games:

www.miraculous.eu.tc

dbGAMES

Treue Seele

Beiträge: 323

Wohnort: Frankfurt

Beruf: Student

  • Private Nachricht senden

13

21.02.2006, 19:46

wenn du das machst bekommst du einen fehler, etwa "error ... variable ....: nichtdeklarierter bezeichner" oder so.
das liegt daran, dass der compiler ja jede cpp datei einzelnd kompilliert, die variable in der anderen datei (da wo sie nicht definiert wurde) also nicht kennt. du sagst ihm, dass es diese variable woanders gibt.
man kann extern deklarieren aber nicht definieren

Beispiel: test.cpp

C-/C++-Quelltext

1
2
3
4
//test wird deklariert, weil sich die definition in anderer datei befindet

extern int test;
//irgendwas damit machen

test += 100;

test2.cpp

C-/C++-Quelltext

1
2
//test wird definiert

int test = 200;


vielleicht ist es jetzt klarer

JossBoss

Treue Seele

  • »JossBoss« ist der Autor dieses Themas

Beiträge: 182

Wohnort: Luxemburg

  • Private Nachricht senden

14

21.02.2006, 19:52

thx jetz schnall ich es ;-)
was passiert denn mit der extern variable test der du 100 beifügst in test.cpp?

sie bekommt ja nicht den wert zugewiesen weil sie noch keine echte variable ist oder? gibts dann ne fehlermeldung?

mfg!! :huhu: :huhu:
Gratis Tools+Software und Games:

www.miraculous.eu.tc

dbGAMES

Treue Seele

Beiträge: 323

Wohnort: Frankfurt

Beruf: Student

  • Private Nachricht senden

15

21.02.2006, 19:54

doch, die variable test hat jetzt in allen dateien den wert 300. sonst wäre es ja nicht die selbe und du könntest einfach eine neue nehmen

JossBoss

Treue Seele

  • »JossBoss« ist der Autor dieses Themas

Beiträge: 182

Wohnort: Luxemburg

  • Private Nachricht senden

16

21.02.2006, 19:58

ok aber wieso muss man sie dann nomal definieren, wenn sie schon existiert? also weshalb schreibste in test2.cpp test=200; ?
weil sie in ner anderen datei ist oeder wie? ???

sag mal is sw: empire at war gut im multiplayer? ;)

mfg :huhu: :huhu:
Gratis Tools+Software und Games:

www.miraculous.eu.tc

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

17

21.02.2006, 20:00

Das Schlüsselwort 'extern' zeigt an, dass eine Variable an einer anderen Stelle im Programm definiert wird.
Bsp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
extern int iExample;

int function()
{
  int i = iExample;
  return i;
}

[...]

int iExample = 2;


Hier wird die Variable iExample bereits vor ihrer Definition verwendet. So ist es z.B. möglich, Variablen zu verwenden, die in einer anderen Datei definiert sind.

Hoffe das ist halbwegs verständlich.

// War viel zu langsam^^
//2: Obwohl int iExample erst nach der Funktion definiert wird stellt extern sicher, dass die Funktion genau diese Variable verwendet. 'extern' erstellt keine eigene Variable

dbGAMES

Treue Seele

Beiträge: 323

Wohnort: Frankfurt

Beruf: Student

  • Private Nachricht senden

18

21.02.2006, 20:02

du hast eine datei (test2.cpp), dort definierst du eine variable (int test = 200). in dieser datei (test2.cpp) rechnest du damit oder so.
jetzt fällt dir ein, dass du in der datei test.cpp die variable test auch brauchst! also deklarierst du sie mit extern auch in test.cpp sodass der compiler wess, dass es die variable test in einer anderen datei gibt.

ich hätte in dem beispiel die 2 dateien vertauschen sollen, wäre logischer gewesen ;)

JossBoss

Treue Seele

  • »JossBoss« ist der Autor dieses Themas

Beiträge: 182

Wohnort: Luxemburg

  • Private Nachricht senden

19

21.02.2006, 20:03

ach hallo grek sry dass du lang nichs mehr gehört hast, aber ich hatte selbst viel in der schule zu tun :rolleyes:
was hat das denn für einen sinn wenn man die variablen vor der defionition verwendet?? was soll das helfen variablen zu benutzen, die in anderen dateien definiert sind?? ???

MFG!!! :huhu: :huhu: :huhu:
Gratis Tools+Software und Games:

www.miraculous.eu.tc

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

20

21.02.2006, 20:14

Angenommen, ein Projekt besteht aus 10 Headerdateien + Quelldateien.

Wenn jetzt jede der 10 Header die selbe Variable verwendet müsste man in der 1. Includierten Headerdatei die Variable definieren um sie überall zur verfügung zu haben. Angenommen aus irgendeinem Grund wird diese Reihenfolge geändert (einer der Header wird vorher schonmal eingebunden [...] ) kann diese Datei nicht mehr auf die globale Variable zugreifen. Eine neue definition würde zu Fehlern führen, da die Variable später erneut definiert wird.
Indem jede Datei die die globale Variablen verwendet eine 'extern' deklaration beinhaltet ist es egal, welche der 10 Header die definition beinhaltet.

Was es helfen soll, Variablen woanders zu verwenden? -> GameState sollte man überall verwenden können ;)

Werbeanzeige