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

Anonymous

unregistriert

1

15.08.2003, 13:25

Namespace

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:

Zitat

Main.obj : error LNK2005: "struct IDirect3DDevice9 * Graphics::pDevPrev" (?pDevPrev@Graphics@@3PAUIDirect3DDevice9@@A) bereits in le3D.obj definiert


Kann mir jemand einen Tipp geben ??

Bye

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

15.08.2003, 14:16

Variablen sollten immer deklariert und definiert werden. Wahrscheinlich hast Du sie nur deklariert. Beispiel:

Header-Datei:
extern int iVariable; // Deklaration

CPP-Datei:
int iVariable; // Definition

Bei Namespaces wird es nicht viel anders sein.

Anonymous

unregistriert

3

15.08.2003, 14:35

hm, jetzt habe ich nicht ganz kapiert was du meinst. Das Beispiel ist ein bischen unverständlich, denn was soll das mit dem extern ??

Das ist doch bei Namensbereichen nicht notwendig

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

4

15.08.2003, 15:54

Ist es möglich das die Datei keine INCLUDE Quard hat?
Weil dieses ist schon definiert in kommt immer wenn man eine Datei mehrfachs includiert z.B. wenn du einen Header includierst und in dem die Header in dem das Device definiert ist und dann nochmal extra in deiner Datei den Header mit dem Device includierst.

Quellcode

1
2
3
4
5
6
7
// MyHeader.h
#ifndef _MYHEADER_H_
#define _MYHEADER_H_

// ... Was im Header steht

#endif


Sollte dich vor diesen Doppel includen schützen.

Ciao DarthB

Anonymous

unregistriert

5

15.08.2003, 16:30

doch doch, hab ich.
Aber die heißen doch include wächter oder ?

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

6

15.08.2003, 19:33

Hehe... wollte Guard anstatt Quard schreiben! ;)
Guard = Wächter... aber weißte bestimmt! ;D

Hmm dann weiß ich auch net. ???

Ciao DarthB

7

15.08.2003, 21:38

dann hilft nur: Code zeigen! ;)
Ein Gespenst geht um in Europa...

Anonymous

unregistriert

8

16.08.2003, 11:10

Hi,
so sieht mein Namespace aus :

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
namespace blaBla
{
    BOOL InitD3D(void);
    BOOL InitScene(void);
    BOOL Exit(void);



    LPDIRECT3D9         pD3D;
    LPDIRECT3DDEVICE9       pDevice;
    LPDIRECT3DDEVICE9       pDevPrev;


    class Irgendeine
    {
        . . .
    };


    class Nocheine
    {

        . . .
    };
}

Anonymous

unregistriert

9

20.08.2003, 10:06

Was nutzt man denn jetzt einen solchen namespace?
Also using namespace blaBla is klar und dann?
was bringt der einem?

10

21.08.2003, 14:15

Re: Namespace

Hmm....die Fehlermeldung ist eindeutig. Irgendwo in deinem Code haste die Variabel noch einmal Definiert. Ist das denn nur bei dieser einen oder auch bei allen anderen?

Zitat

Was nutzt man denn jetzt einen solchen namespace?
Namespaces nutzt man dann wenn man z.B. eine Bibliothek, wie z.B. die STL, aufbaut.

Zitat

Also using namespace blaBla is klar und dann?
was bringt der einem?
Namespaces verhindern das Variablen, Klassen, Strukturen usw. mehrfach Definiert werden. Z.B.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
// Klasse von Bibliothek XY
class Node
{
  ....
};

// Jetzt willst du auch eine Klasse Node erzeugen, aus irgend welchen Gründen
class Node
{
  ....
};
// Ist ein Fehler. Der Compiler schmeißt nun eine Fehlermeldung ala Redefinition of class "Node"

Aber so geht's

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Klasse von Bibliothek XY
namespace xy
{
  class Node
  {
    ....
  };
}

// Deine Node Klasse
class Node
{
  ....
};


Des weiteren sollte man ein using namespace blabla immer vermeiden. Besser ist wenn man nur bestimmte Klassen angibt.

Quellcode

1
2
include <string>
using std::string;
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige