Programmiersprache: c++
Programmierumgebung: Visual c++
Library: d3d9.lib
Buch: 3D-Spieleprogrammierung von David Scherfgen
Ich habe erfolgreich eine Anwendung geschrieben, welche ohne die Tribaseengine, Direct3D initialisiert und ein Dreieck zeichnet.
Darauf hin habe ich versucht diese Anwendung unter der Verwendung von OOP neu zu schreiben.
Dafür habe ich folgende Header:
vertexs.h
init3d.h
basicheader.h
und folgende cpp-files:
main.cpp
vertexs.cpp
init3d.cpp
verwendet.
vertexs.h:
|
Quellcode
|
1
2
3
4
5
|
#pragma once
#ifndef _vertexs_h_#define _vertexs_h_
#include "basicheader.h"
//stuff
#endif
|
init3d.h:
|
Quellcode
|
1
2
3
4
5
|
#pragma once
#ifndef _init3d_h_#define _init3d_h_
#include "basicheader.h"#include "vertexs.h"
//stuff
#endif
|
basicheader.h:
|
Quellcode
|
1
2
3
4
|
#pragma once
#ifndef _basicheader_h_#define _basicheader_h_
#include <Windows.h>#include <d3d9.h>#include <math.h>
#endif
|
init3d.cpp:
|
Quellcode
|
1
2
|
#include "init3d.h"
//stuff
|
vertexs.cpp:
|
Quellcode
|
1
2
|
#include "vertexs.h"
const DWORD vertexs::fvfdw = D3DFVF_XYZ | D3DFVF_DIFFUSE;
|
main.cpp
|
Quellcode
|
1
2
3
|
#include "vertexs.h"#include "init3d.h"
#include <Windows.h>#include <math.h>#include <d3d9.h>
//stuff
|
Nun erhalte ich folgende Fehlermeldung:
1>main.obj : error LNK2005: "struct IDirect3DDevice9 * d3ddp" (?d3ddp@@3PAUIDirect3DDevice9@@A) already defined in init3d.obj
1>main.obj : error LNK2005: "struct _D3DMATRIX d3dmatrix0" (?d3dmatrix0@@3U_D3DMATRIX@@A) already defined in init3d.obj
1>main.obj : error LNK2005: "struct _D3DPRESENT_PARAMETERS_ ppd3d" (?ppd3d@@3U_D3DPRESENT_PARAMETERS_@@A) already defined in init3d.obj
1>main.obj : error LNK2005: "struct vertexs * vertexsa" (?vertexsa@@3PAUvertexs@@A) already defined in init3d.obj
1>main.obj : error LNK2005: "struct IDirect3D9 * d3dp" (?d3dp@@3PAUIDirect3D9@@A) already defined in init3d.obj
1>C:\Geogame\Geogame1\Debug\Geogame1.exe : fatal error LNK1169: one or more multiply defined symbols found
Ich würde das Project gerne in die oben beschriebenen files aufgespalten lassen.
Dafür ist es jedoch unabdinglich, dass ich einen selbst definierten Header zweimal includieren kann.