|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
IO Mini JLI'ler
Anmeldedatum: 02.08.2003 Beiträge: 21
Medaillen: Keine
|
Verfasst am: 15.08.2003, 17:09 Titel: Namensbereiche |
|
|
Hallo,
sorry, dass ich mit so einer einfachen Frage nerve, aber ich bekomme dieses blöde Problem einfach nicht weg.
Ich hab einen Namensbereich und darin habe ich 2 Device. Wnen ich jetzt die Datei z.B. in Main.cpp einbinden will, dann bekomm ich immer diese Fehler:
[quote]
Main.obj : error LNK2005: "struct IDirect3DDevice9 * Graphics::pDevPrev" (?pDevPrev@Graphics@@3PAUIDirect3DDevice9@@A) bereits in le3D.obj definiert
[quote]
Ich hab auch Header Wächter....
Kann mir jemand einen Tipp geben ??
Bye |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 15.08.2003, 17:42 Titel: |
|
|
Ich nehme an, dass du in deinem (beiden) Headern zu stehen hast:
Code: | LPD3DDevice9 pDevPrev=null; |
Du darft in Headern aber nicht Initialisieren, sondern nur Definieren.
Zum Initialisieren sollten Konstruktoren verwendet werden.
Auch sollte beachtet werden, dass der gleiche Header nur ein mal includiert wird. ==> #pragma once
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
IO Mini JLI'ler
Anmeldedatum: 02.08.2003 Beiträge: 21
Medaillen: Keine
|
Verfasst am: 15.08.2003, 17:45 Titel: |
|
|
nein hab ich nicht
Ausserdem steht ja in dem Fehler: Mehrfach definiert !
Nicht deklariert |
|
Nach oben |
|
|
IO Mini JLI'ler
Anmeldedatum: 02.08.2003 Beiträge: 21
Medaillen: Keine
|
Verfasst am: 16.08.2003, 09:27 Titel: |
|
|
*push*
Kann mir echt niemand helfen ??
So sieht mein Namensbereich aus: Code: | namespace blaBla
{
BOOL InitD3D(void);
BOOL InitScene(void);
BOOL Exit(void);
LPDIRECT3D9 pD3D;
LPDIRECT3DDEVICE9 pDevice;
LPDIRECT3DDEVICE9 pDevPrev;
class Irgendeine
{
. . .
};
class Nocheine
{
. . .
};
} |
Bitte.......... |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 16.08.2003, 09:37 Titel: |
|
|
Ich bin mir zimlich Sicher, dass du
a) Mehrere Dateien in deinem Projekt hast,
b) ein und den selben Header (der wo dein Codeausschnitt zu sehen ist) von Verschiedenen C++-Dateien includiert wird.
Damit werden in jedem Objekt beim Erstellen der Ausführbaren Datei die Funktionen InitD3D, InitSzene und Exit sowie die Variablen pD3D, pDevice und pDevPrew definiert. Da diese Objekte ann in mehreren Obj-Dateien zu finden sind, weiß der Linker später nicht, welchen er nutzen kann.
Lösung: Weniger globale Variablen nutzen und die, die sich gar nicht vermeiden lassen müssen als extern definiert werden und in einer einzigen C++-Datei am anfang extra definiert werden, dort ohne extern.
Damit weiß der Linker, dass diese Funktionen und Variablen die gleichen sind. Durch die Extern-Definition werden sie den anderen Objekt-Dateien nur bekannt gemacht, ohne eine wirkliche definition zu erstellen.
HTH
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
IO Mini JLI'ler
Anmeldedatum: 02.08.2003 Beiträge: 21
Medaillen: Keine
|
Verfasst am: 16.08.2003, 10:01 Titel: |
|
|
Hi,
dürfte doch aber eigntlich nicht sein, denn ihc hab ja Include Guards.
Oder bringen die nichts ??
Bei 1) und 2) hast du recht, allerdings dürfte es dohc mit den Guards keine Probleme geben. |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 16.08.2003, 18:07 Titel: |
|
|
Von Incude Guards hab ich noch nie was gehört. Ist das ein Plugin für VC? Wenn er solche Fehler verhindern soll - funktioniert er wohl nicht richtig...
Lösungsvorschläge hab ich ja schon gegeben. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 16.08.2003, 18:11 Titel: |
|
|
#pragma once z.B. nennt man Include Guard. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 16.08.2003, 18:24 Titel: |
|
|
Ach so, das verwende ich ja auch.
ABER Ich zeige mal ein Komkretes Beispiel, wo der Fehler auftritt:
3 Dateien, 2 C++-Dateien und 1 Header.
Header.h Code: | #pragma once
int i=0;
| Datei1.cpp Code: | #include "Header.h"
int get_i() {
return i;
}
| Datei2.cpp Code: | #include "Header.h"
void set_i(int _i) {
i=_i;
}
|
Jetzt kompilieren wir das mal Schrittweise:
Datei1.obj
Es werden die Symbole i und get_i() angelegt.
Datei2.obj
Es werden die Symbole i und set_i(int) angelegt.
beim Linken werden jetzt alle Obj-Dateien in eine (ausführbare) Datei gelinkt. Der Linker findet aber in beiden Objektdateien das Symbol i und hat keine Information darüber, ob es das gleiche Symbol ist oder ob es unterschiedliche Symbole sind.
Fazit: Global definierte Symbole können Ärger verursachen (Verursachen fast immer Ärger) _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|