Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
03.02.2001, 16:42
RocketCoder



Ich bin immer noch am RundenSystem. *hehe*
Da hab ich ne Fragen: (kommen sehr wahrscheinlich noch ein paar dazu)
1. Wie kann ich ne Variable deklarieren, die ich in mehreren Dateien nutzen kann ?

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
001
03.02.2001, 18:06
DBug



Ich bin zwar noch C++ Newbie, aber ich glaube das geht wie folgt:

-In eine beliebige Datei z.B. int Var1 schreiben
-Dann in alle header Dateien, die zu den Dateien gehören, in denen du die Variable brauchst
'extern int var1' schreiben...

...oda so :)... wie gesagt, noch c++ newbie

cYa

--

zum Seitenanfang zum Seitenende Profil || Suche
002
03.02.2001, 18:18
RocketCoder



meinst du jetzt 1.cpp int var1...include bsp.h
bsp.h extern int var1
2.cpp include bsp.h
kann ich die jetzt benutzen in der 2.cpp?

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
003
03.02.2001, 18:20
DBug



Ich glaube :) bin mir aber nicht sicher...

--

zum Seitenanfang zum Seitenende Profil || Suche
004
03.02.2001, 19:33
Kriz



DBug hat recht. Das funzt aber nur bei globalen Variablen!

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
005
03.02.2001, 19:44
Blacky|SfP



Wie willst du Var in verschieden Dlls benutzen oder nur in verschieden Cpp dateien?

--

zum Seitenanfang zum Seitenende Profil || Suche
006
05.02.2001, 11:23
RocketCoder



nur in verscheidenen .cpp (sind alle in der mp.dll)
@Kriz: Was meinst du mit globalen Vars ?

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
007
05.02.2001, 12:25
DBug



Im Unterschied zu lokalen Variablen sind globale Variablen in der gesamten Datei
(bzw. jetzt sogar in mehreren Dateien) sichtbar und sie können überall benutzt werden.

--

zum Seitenanfang zum Seitenende Profil || Suche
008
05.02.2001, 14:05
Buy-Menu-Man



So hallo........
Globale Variablen werden nicht in Klassen oder Funktionen deklariert!
Also nicht:
class Hallo
{
int keineGlobaleVariable;
};

sondern halt einfach in der Datei!

cu
Buy-Menu-Man

--

http://battletech-hl.teamfortress2.de

zum Seitenanfang zum Seitenende Profil || Suche
009
05.02.2001, 16:58
Blacky|SfP



LOL
class HELLO ist doch ne Klasse!

--

zum Seitenanfang zum Seitenende Profil || Suche
010
05.02.2001, 17:09
Hellfire



deshalb heisst's ja auch [c=#FF0000]keineGlobaleVariable[/c] . Das Beispiel sollte nur zeigen, wie man es nicht machen soll...

--

zum Seitenanfang zum Seitenende Profil || Suche
011
05.02.2001, 18:09
Funstar



geh mal auf http://coding.thewall.de/index.php?inc=modfaq.

MFG Funstar
Fuck NBK'z

The Matrix has you...

--

zum Seitenanfang zum Seitenende Profil || Suche
012
05.02.2001, 19:50
Buy-Menu-Man



Ahm..........ich glaub das blickt wohl jeder, was ich mit meinem Beispiel gemeint hab, oder?

--

http://battletech-hl.teamfortress2.de

zum Seitenanfang zum Seitenende Profil || Suche
013
05.02.2001, 20:56
Hellfire



ich versteh auch net so ganz, was dadran unverständlich ist... (gut, ich hab ein paar c++ Grundkenntnisse).

--

zum Seitenanfang zum Seitenende Profil || Suche
014
06.02.2001, 13:23
Kriz



@Buy-Menu-Man: Dann sind sie aber immernoch in einem gewissen Sinne lokal, denn eine globale Variable in dat1.cpp ist nicht in dat2.cpp bis datX.cpp sichtbar und gültig! In diesen Dateien muß man die globale Variable aus dat1.cpp per Schlüsselwort extern auch in der betreffenden Datei erstmal gültig und sichtbar machen.

Das was Du gemeint hast, schimpft sich salopp gesagt: Lokal-globale Variable. Das Wort habe ich gerade mal erfunden...

@Hellfire: Och, da gibt's ne Menge Zeug, was nur die Profis wissen können, weil's in den ganzen Anfänger- und Fortgeschrittenen-Büchern zu C++ nicht drinsteht. Schon mal was von Smart-Zeigern gehört? *ggg*

@RocketCoder: Kleines Beispiel:

// Datei dat1.cpp

int Global; // Global nur in dat1.cpp global gültig und sichtbar

// Datei dat2.cpp

extern int Global; // Global ist jetzt auch in dat2.cpp global gültig und sichtbar

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
015
06.02.2001, 13:25
apfelkorn



hehe... jetzt sind nur die gefoppt, die keine Peilung von c haben. Nicht mein Problem! Erst C lernen, dann SDK "coden" und nícht nur modifizieren!

--

zum Seitenanfang zum Seitenende Profil || Suche
016
06.02.2001, 13:32
Hellfire



[2.edit]
schön... dann erzählt ruhig weiter, wie gut ihr seid.. ist mir heute sowieso eigentlich ziemlich egal
[/2.edit]

--

zum Seitenanfang zum Seitenende Profil || Suche
017
06.02.2001, 13:44
RocketCoder



@Kriz: Muss also doch keine .h included werden ?

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
018
06.02.2001, 15:44
Kriz



Das mit den Headerdateien bezieht sich ja nur auf die ursprüngliche Trennung von Deklaration und Definiton. Also ich progge das immer so (auf Klassen bezogen):

Jede Klasse bekommt seine eigene Headerdatei und seine eigene Quellcodedatei (beide haben denselben Dateinamen). Globale Definitionen von Datentypen, Makros, Aufzählungen und Strukturen/Unionen bekommen eine eigene Headerdatei (meist OHNE ein dazugehörige Quellcodedatei). Da ich aber grundsätzlich so gut wie niemals mit globalen Variablen arbeite (das ist verpönt in C++), linkt der Binder von VC++ 6.0 durch geschicktes Includen alle Dateien zusammen, so daß im eigentlichen Hauptquellcode (dort wo main() drin steht) alles implementiert ist, was die Hauptfunktion benötigt.

Im Prinzip wird extern heute nur noch mit den C-Runtime-Librarys verwendet, also wenn man in seinem C++ Code explizit C verwenden will. Der Compiler wechselt dann während dem Kompilieren zwischen C++ Runtime und C Runtime hin und her. Solche Dinge erkennt man an folgendem Codeblöcken:

extern "C"
{
...
}

Durch geschickten Einsatz von Basisklassen läßt sich der Einsatz von globalen Variabeln in C++ fast komplett vermeiden.

Cu

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
019
06.02.2001, 19:29
Buy-Menu-Man



Also das heißt, dass man normalerweiße nicht extern verwenden sollte, sondern wie dann?????
Sorry.....hab das immer noch nicht gecheckt!

Also wenn du für jede Klasse ne eigene Datei+Header machst müsste es ja in HL hunderte von cpp und header-dateien geben.......die typen von Valve haben das anders gemacht.....

Oh Mann.......wann hast du denn dein Tutorial fertig.....dass dir auch ein normal Sterblicher folgen kann????

cu
Buy-Menu-Man

--

http://battletech-hl.teamfortress2.de

zum Seitenanfang zum Seitenende Profil || Suche
020
06.02.2001, 22:42
Another1



Die von Valve hatten ja auch keine Ahnung von kontrollierter Programmierung ... mhh immer ihre HACK!HACK! und !UNDONE! dinger *g*

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
021
06.02.2001, 22:52
apfelkorn



// HACK!HACK!

Aaaalso: Wenn man jetzt in einem Kaufsystem das ganze machen will und man arbeitet mit Klassen, kann man natürlich sich den Pointer auf eine Klasse holen (CKlasse *pKlasse;) und dann auf die Member-Variable damit zugreifen (pKlasse->MemberVariable) auch aus anderen Dateien raus. Andernfalls (ich denke mal so wird es sein) kannst du in der cpp-datei eine neue nicht-Member-Variable einrichten und den Wert innerhalb der Datei ändern, und aus anderen Dateien mit "extern float/int/char/wasauchimmer Variablenname;" Die Variable in der anderen Datei zugänglich machen. Im Einzelfall mag es vielleicht noch okay sein, aber lass dir das bloss nicht zur Angewihnheit werden! ;)

Und wie gesagt: Erst C lernen, dann Half-Life "coden" (und ein Buy-Menu ist für mich mehr als nur modifizieren von vorhandem Code)!

--

zum Seitenanfang zum Seitenende Profil || Suche
022
07.02.2001, 12:40
Prefect



Hmm.. eigentlich würde ich ja static-Variablen als lokal-global bezeichnen. Eine mit

static int foo;

deklarierte Variable wird _nicht_ in die globale Symboltabelle eingetragen. D.h. du kannst noch so viele externs in andere Sourcefiles einbauen, do kommst an die Variable nicht ran.

Wenn static nicht angegeben wird, werden alle globalen Variablen und Funktionen in die globale Symboltabelle mit aufgenommen. Wenn du versuchst, eine Variable in zwei Sourcefiles mit

int foo;

zu deklarieren, wird sich der Linker entsprechend über doppelt vorkommende Symbole aufregen.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
023
07.02.2001, 17:49
apfelkorn



jepp...

--

zum Seitenanfang zum Seitenende Profil || Suche