17 / 17 / 10
Регистрация: 14.06.2012
Сообщений: 151
1

VS2012+DirectX9 многократно определенный символ

30.08.2013, 07:55. Показов 578. Ответов 5
Метки нет (Все метки)

Решил растаскать по файлам свой проект, а то все как то в куче. После сего действия начало ругатся о многократном включении перемнных, функций и т.д.. Почитав по этой теме и посмотрев примеры - исправил. Но две ошибки так же и висят. Почему понять не могу, проект чистил, создавал новый, а оно все ругается на вещи которых нету в файле. Может кто то подскажет куда копать?)

main.cpp
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
#include <Windows.h>
#include "incl_dx9.h"
#include "cube_func.h"
 
HWND MainWindowHandle = 0;
 
IDirect3DVertexBuffer9* roomBuff = 0;
 
ID3DXMesh* teapot = 0;
IDirect3DTexture9* mirrorTex = 0;
IDirect3DTexture9* roomTex = 0;
IDirect3DTexture9* carpetTex = 0;
 
ID3DXFont* Font = 0;
RECT rect = {0, 0, 1280, 720};
 
D3DMATERIAL9 box;
 
D3DLIGHT9 directLight;
 
D3DXMATRIX rotatX, rotatY, rotatMatrix, teapotWorldMatrix, teapotPlace, teapotScaling, W, T, R;
 
D3DXPLANE plane(0.0f, 0.0f, 1.0f, 0.0f);
 
 
const D3DXCOLOR WHITE(D3DCOLOR_XRGB(255, 255, 255));
const D3DXCOLOR BLACK(D3DCOLOR_XRGB(0, 0, 0));
 
float angleY = 0.0f;
 
//STEP 1 : Initialising DX9 (GLOBAL VAR) 
 
IDirect3D9* d3d = NULL;
IDirect3DDevice9* device3D = NULL;
 
//
 
bool InitWindowsApp(HINSTANCE instanceHandle, int show);
 
int Run();
 
void room();
 
void RenderMirror();
 
void Text();
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pCmdLine, int nShowCmd)
{
     if(!InitWindowsApp(hInstance, nShowCmd))
     {
          ::MessageBox(0, L"Init - Failed", L"Error", MB_OK);
          return 0;
     } 
 
     Cube(device3D);
     room();
     Text();
 
     return Run();
}
 
bool InitWindowsApp(HINSTANCE instanceHandle, int show)
{
    WNDCLASS wc;
 
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = instanceHandle;
    wc.hIcon         = ::LoadIcon(0, IDI_APPLICATION);
    wc.hCursor       = ::LoadCursor(0, IDC_ARROW);
    wc.hbrBackground = static_cast<HBRUSH>(::GetStockObject(WHITE_BRUSH));
    wc.lpszMenuName  = 0;
    wc.lpszClassName = L"DirectX";
 
    if(!::RegisterClass(&wc))
    {
        ::MessageBox(0, L"ERROR", 0, 0);
        return false;
    }
 
    MainWindowHandle = ::CreateWindow(L"DirectX", L"DirectX9", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1280, 720, 0, 0, instanceHandle, 0);
 
    if(MainWindowHandle == 0)
    {
        ::MessageBox(0, L"Создание окна завершилось ошибкой!", 0, 0);
        return false;
    }
 
    ::ShowWindow(MainWindowHandle, show);
    ::UpdateWindow(MainWindowHandle);
 
    //STEP 2 : Initialising DX9
 
    d3d = Direct3DCreate9(D3D_SDK_VERSION);
 
    D3DPRESENT_PARAMETERS presentParam;
    ZeroMemory(&presentParam, sizeof(presentParam));
 
    presentParam.BackBufferHeight       = 720;
    presentParam.BackBufferWidth        = 1280;
    presentParam.BackBufferFormat       = D3DFMT_A8R8G8B8;
    presentParam.BackBufferCount        = 1;
    presentParam.Windowed               = true;
    presentParam.hDeviceWindow          = MainWindowHandle;
    presentParam.SwapEffect             = D3DSWAPEFFECT_DISCARD;
    presentParam.AutoDepthStencilFormat = D3DFMT_D24S8;
    presentParam.EnableAutoDepthStencil = true;
 
    if(FAILED(d3d->CreateDevice(0, D3DDEVTYPE_HAL, MainWindowHandle, D3DCREATE_HARDWARE_VERTEXPROCESSING, &presentParam, &device3D)))
    {
        ::MessageBox(0, L"ERROR 'CreateDevice'", L"ERROR", 0);
        return 0;
    }
 
 
    //
 
    //
 
    D3DXCreateTeapot(device3D, &teapot, 0);
    
    D3DXVECTOR3 position(-7.0f, 0.0f, -12.0f);
    D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
    D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
    D3DXMATRIX view;
    D3DXMatrixLookAtLH(&view, &position, &target, &up);
 
    device3D->SetTransform(D3DTS_VIEW, &view);
 
    //
 
    //
 
    D3DXMATRIX projection;
    D3DXMatrixPerspectiveFovLH(&projection, D3DX_PI*0.5f, 16.0f/9.0f, 1.0f, 1000.0f);
    device3D->SetTransform(D3DTS_PROJECTION, &projection);
 
    //
 
    //
 
    ZeroMemory(&box, sizeof(D3DMATERIAL9));
 
    box.Ambient = WHITE;
    box.Diffuse = WHITE;
    box.Specular = WHITE;
    box.Emissive = BLACK;
    box.Power = 5.0f;
 
    ZeroMemory(&directLight, sizeof(D3DLIGHT9));
 
    directLight.Type = D3DLIGHT_DIRECTIONAL;
    directLight.Diffuse = WHITE;
    directLight.Specular = WHITE*0.3f;
    directLight.Ambient = WHITE*0.6f;
    directLight.Direction = D3DXVECTOR3(1.0f, 0.0f, 0.0f);
 
    device3D->SetRenderState(D3DRS_LIGHTING, true);
    device3D->SetRenderState(D3DRS_NORMALIZENORMALS, true);
 
    device3D->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);
    device3D->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC);
    device3D->SetSamplerState(0, D3DSAMP_MAXANISOTROPY, 16);
    device3D->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
 
    device3D->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
    device3D->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
    device3D->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
    device3D->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
    device3D->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
 
    device3D->SetRenderState(D3DRS_STENCILENABLE, true);
 
 
 
    //
 
    return true;
}
 
int Run()
{
    MSG msg;
    ZeroMemory(&msg, sizeof(MSG));
 
    while(true)
    {
        if(::PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
        {
            if(msg.message == WM_QUIT)
            {
                break;
            }
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        }
 
        //STEP 3 : CLEAR SCREEN, DRAW SCENE "BEGIN() & END()", SHOW SCENE "PRESENT()"
 
        else
        {
            D3DXMATRIX roomWorld;
 
            device3D->SetMaterial(&box);
            device3D->SetLight(0, &directLight);
            device3D->LightEnable(0, true);
            device3D->SetRenderState(D3DRS_SPECULARENABLE, true);
 
 
            D3DXMatrixRotationX(&rotatX, 3.14f/2.9f);
            D3DXMatrixRotationY(&rotatY, angleY);
            rotatMatrix = rotatX*rotatY;
            angleY+=0.02f;
 
            D3DXMatrixTranslation(&teapotPlace, 0.0f, 0.0f, 10.0f);
            D3DXMatrixScaling(&teapotScaling, 8.5f, 8.5f, 8.5f);
            teapotWorldMatrix = teapotScaling*teapotPlace;
 
            D3DXMatrixTranslation(&teapotPlace, -5.0f, 2.0f, 12.0f);
            D3DXMatrixScaling(&teapotScaling, 1.0f, 1.0f, 1.0f);
            roomWorld = teapotScaling*teapotPlace;
 
            D3DXMatrixReflect(&R, &plane);
            D3DXMatrixTranslation(&T, 0.0f, 0.0f, 10.f);
 
            W = T * R;
 
            device3D->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, 0xffffffff, 1.0f, 0);
            device3D->BeginScene();
 
            device3D->SetStreamSource(0, roomBuff, 0, sizeof(vertex));
            device3D->SetTransform(D3DTS_WORLD, &roomWorld);
            device3D->SetFVF(D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1);
            device3D->SetTexture(0, roomTex);
            device3D->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 4);
            device3D->SetTexture(0, carpetTex);
            device3D->DrawPrimitive(D3DPT_TRIANGLELIST, 12, 2);
 
            //Запрещаем запись во вторичный буфер и буфер глубины
            //device3D->SetRenderState(D3DRS_ZWRITEENABLE, false);
            //device3D->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
            //device3D->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
 
            device3D->SetTexture(0, mirrorTex); 
            device3D->DrawPrimitive(D3DPT_TRIANGLELIST, 18, 2);
 
            //разрешаем запись в буфер глубины
            //device3D->SetRenderState(D3DRS_ZWRITEENABLE, true);
 
            //device3D->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_EQUAL);
            //device3D->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_KEEP);
 
            device3D->SetTransform(D3DTS_WORLD, &teapotWorldMatrix);
            device3D->SetTexture(0, 0);
            teapot->DrawSubset(0);
 
            cubeDraw(device3D);
            device3D->SetFVF(D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1);
            device3D->SetTexture(0, tex);
            device3D->SetTransform(D3DTS_WORLD, &rotatMatrix);
            device3D->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 12);
            
            device3D->EndScene();
            Font->DrawText(0, L"Win32DirectX", -1, &rect, 0, 0xf03a2ecb);
            device3D->Present(0, 0, 0, 0);
 
        }
        
        //
 
    }
    
    //STEP 4 : RELEASE COM OBJECT
 
    cubeRelease();
    teapot->Release();
    texRelease();
    roomBuff->Release();
 
    if(device3D != NULL)
    {
        device3D->Release();
    }
    if(d3d != NULL)
    {
        d3d->Release();
    }
 
    //
 
    return msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND MainWindowHandle, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_KEYDOWN:
            if(wParam == VK_ESCAPE)
                ::DestroyWindow(MainWindowHandle);
            return 0;
 
        case WM_DESTROY:
            ::PostQuitMessage(0);
            return 0;
    }
 
    return ::DefWindowProc(MainWindowHandle, msg, wParam, lParam);
}
 
void room()
{
    device3D->CreateVertexBuffer(24*sizeof(vertex), D3DUSAGE_WRITEONLY, D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1, D3DPOOL_MANAGED, &roomBuff, 0);
 
    vertex* vertexRoom = 0;
 
    roomBuff->Lock(0, 0,( void**)&vertexRoom, 0);
 
    //стены
 
    vertexRoom[0] = vertex(-15.0f, -10.f, 0.0f, 0.0f, 0.0f, -2.0f, 0.0f, 1.0f);
    vertexRoom[1] = vertex(-15.0f,  10.f, 0.0f, 0.0f, 0.0f, -2.0f, 0.0f, 0.0f);
    vertexRoom[2] = vertex(-5.0f, -10.f, 0.0f, 0.0f, 0.0f, -2.0f, 1.0f, 1.0f);
 
    vertexRoom[3] = vertex(-5.0f, -10.f, 0.0f, 0.0f, 0.0f, -2.0f, 1.0f, 1.0f);
    vertexRoom[4] = vertex(-15.0f, 10.f, 0.0f, 0.0f, 0.0f, -2.0f, 0.0f, 0.0f);
    vertexRoom[5] = vertex(-5.0f,  10.f, 0.0f, 0.0f, 0.0f, -2.0f, 1.0f, 0.0f);
 
 
    vertexRoom[6] = vertex( 15.0f, -10.f, 0.0f, 0.0f, 0.0f, -200.0f, 1.0f, 1.0f);
    vertexRoom[7] = vertex( 5.0f,  -10.f, 0.0f, 0.0f, 0.0f, -200.0f, 0.0f, 1.0f);
    vertexRoom[8] = vertex( 5.0f,  10.f, 0.0f, 0.0f, 0.0f, -200.0f, 0.0f, 0.0f);
 
    vertexRoom[9] = vertex( 5.0f,  10.f, 0.0f, 0.0f, 0.0f, -200.0f, 0.0f, 0.0f);
    vertexRoom[10] = vertex( 15.0f, 10.f, 0.0f, 0.0f, 0.0f, -200.0f, 1.0f, 0.0f);
    vertexRoom[11] = vertex( 15.0f, -10.f, 0.0f, 0.0f, 0.0f, -200.0f, 1.0f, 1.0f);
 
    //пол
 
    vertexRoom[12] = vertex(-15.0f, -10.f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f);
    vertexRoom[13] = vertex( 15.0f, -10.f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f);
    vertexRoom[14] = vertex(-15.0f, -10.f,-60.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
 
    vertexRoom[15] = vertex( 15.0f, -10.f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f);
    vertexRoom[16] = vertex( 15.0f, -10.f,-60.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f);
    vertexRoom[17] = vertex(-15.0f, -10.f,-60.0f, 0.0f, 1.0f, 0.0f , 0.0f, 1.0f);
 
    //зеркало
 
    vertexRoom[18] = vertex(-5.0f, -10.f, 0.0f, 0.0f, 0.0f, -200.0f, 0.0f, 1.0f);
    vertexRoom[19] = vertex(-5.0f,  10.f, 0.0f, 0.0f, 0.0f, -200.0f, 0.0f, 0.0f);
    vertexRoom[20] = vertex( 5.0f, -10.f, 0.0f, 0.0f, 0.0f, -200.0f, 1.0f, 1.0f);
 
    vertexRoom[21] = vertex( 5.0f, -10.f, 0.0f, 0.0f, 0.0f, -200.0f, 1.0f, 1.0f);
    vertexRoom[22] = vertex(-5.0f,  10.f, 0.0f, 0.0f, 0.0f, -200.0f, 0.0f, 0.0f);
    vertexRoom[23] = vertex( 5.0f,  10.f, 0.0f, 0.0f, 0.0f, -200.0f, 1.0f, 0.0f);
 
    roomBuff->Unlock();
 
    D3DXCreateTextureFromFile(device3D, L"oboi.jpg", &roomTex);
    D3DXCreateTextureFromFile(device3D, L"mirror.jpg", &mirrorTex);
    D3DXCreateTextureFromFile(device3D, L"carpet.jpg", &carpetTex);
}
 
void RenderMirror()
{
    device3D->SetRenderState(D3DRS_STENCILFUNC,      D3DCMP_ALWAYS);
    device3D->SetRenderState(D3DRS_STENCILREF,       0x1);
    device3D->SetRenderState(D3DRS_STENCILMASK,      0xffffffff);
    device3D->SetRenderState(D3DRS_STENCILWRITEMASK, 0xffffffff);
    device3D->SetRenderState(D3DRS_STENCILZFAIL,     D3DSTENCILOP_KEEP);
    device3D->SetRenderState(D3DRS_STENCILFAIL,      D3DSTENCILOP_KEEP);
    device3D->SetRenderState(D3DRS_STENCILPASS,      D3DSTENCILOP_REPLACE);
}
 
void Text()
{
    D3DXFONT_DESC lf;
    ZeroMemory(&lf, sizeof(D3DXFONT_DESC));
    
    lf.Height    = 34;
    lf.Width     = 17;
    lf.Weight    = 777;
    lf.Italic    = false;
    lf.CharSet   = DEFAULT_CHARSET;
    lstrcpy(lf.FaceName, L"Times New Roman");
 
    D3DXCreateFontIndirect(device3D, &lf, &Font);
}
Vertex(struct).h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct vertex
{
    vertex(){};
    vertex(float x, float y, float z, float normalX, float normalY, float normalZ, float texU, float texV)
    {
        _x = x; _y = y, _z = z;
 
        _normalX = normalX; _normalY = normalY, _normalZ = normalZ;
 
        _texU = texU; _texV = texV;
 
    }
    float _x, _y, _z;
    float _normalX, _normalY, _normalZ;
    float _texU, _texV;
};
incl_dx9.h
C++
1
2
3
4
5
6
7
8
#ifndef INCL_DX9_H
#define INCL_DX9_H
 
#include <d3d9.h>
#include <d3dx9.h>
#include "Vertex(struct).h"
 
#endif
cube_func.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef CUBE_H
#define CUBE_H
 
#include "incl_dx9.h"
 
IDirect3DVertexBuffer9* vertexBuff = 0;
IDirect3DTexture9* tex = 0;
 
void Cube(IDirect3DDevice9*);
 
void cubeRelease();
 
void cubeDraw(IDirect3DDevice9* device3D);
 
void texRelease();
 
#endif
cube.cpp
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "cube_func.h"
 
void Cube(IDirect3DDevice9* device3D)
{
    device3D->CreateVertexBuffer(36*sizeof(vertex), D3DUSAGE_WRITEONLY, D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1, D3DPOOL_MANAGED, &vertexBuff, 0);
 
    vertex* vertexes = 0;
    vertexBuff->Lock(0, 0, (void**)&vertexes, 0);
 
    //перед
    vertexes[0] = vertex(-2.0f, -2.0f, -2.0f, 0.0f, 0.0f, -16.0f, 0.0f, 1.0f);
    vertexes[1] = vertex(-2.0f,  2.0f, -2.0f, 0.0f, 0.0f, -16.0f, 0.0f, 0.0f);
    vertexes[2] = vertex( 2.0f,  2.0f, -2.0f, 0.0f, 0.0f, -16.0f, 1.0f, 0.0f);
 
    vertexes[3] = vertex(-2.0f, -2.0f, -2.0f, 0.0f, 0.0f, -16.0f, 0.0f, 1.0f);
    vertexes[4] = vertex( 2.0f,  2.0f, -2.0f, 0.0f, 0.0f, -16.0f, 1.0f, 0.0f);
    vertexes[5] = vertex( 2.0f, -2.0f, -2.0f, 0.0f, 0.0f, -16.0f, 1.0f, 1.0f);
 
    //зад
 
    vertexes[6] = vertex(-2.0f, -2.0f,  2.0f, 0.0f, 0.0f, 16.0f, 1.0f, 1.0f);
    vertexes[7] = vertex( 2.0f, -2.0f,  2.0f, 0.0f, 0.0f, 16.0f, 0.0f, 1.0f);
    vertexes[8] = vertex( -2.0f,  2.0f,  2.0f, 0.0f, 0.0f, 16.0f, 1.0f, 0.0f);
 
    vertexes[9] = vertex( 2.0f, -2.0f,  2.0f, 0.0f, 0.0f, 16.0f, 0.0f, 1.0f);
    vertexes[10] = vertex( 2.0f,  2.0f, 2.0f, 0.0f, 0.0f, 16.0f, 0.0f, 0.0f);
    vertexes[11] = vertex( -2.0f, 2.0f,  2.0f, 0.0f, 0.0f, 16.0f, 1.0f, 0.0f);
 
    //лево
 
    vertexes[12] = vertex(-2.0f, -2.0f, -2.0f, -16.0f, 0.0f, 0.0f, 1.0f, 1.0f);
    vertexes[13] = vertex(-2.0f, -2.0f,  2.0f, -16.0f, 0.0f, 0.0f, 0.0f, 1.0f);
    vertexes[14] = vertex(-2.0f,  2.0f,  2.0f, -16.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 
    vertexes[15] = vertex(-2.0f, -2.0f, -2.0f, -16.0f, 0.0f, 0.0f, 1.0f, 1.0f);
    vertexes[16] = vertex(-2.0f,  2.0f,  2.0f, -16.0f, 0.0f, 0.0f, 0.0f, 0.0f);
    vertexes[17] = vertex(-2.0f,  2.0f, -2.0f, -16.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 
    //право
 
    vertexes[18] = vertex( 2.0f, -2.0f, -2.0f, 16.0f, 0.0f, 0.0f, 0.0f, 1.0f);
    vertexes[19] = vertex( 2.0f, 2.0f, -2.0f,  16.0f, 0.0f, 0.0f, 0.0f, 0.0f);
    vertexes[20] = vertex( 2.0f, -2.0f, 2.0f,  16.0f, 0.0f, 0.0f, 1.0f, 1.0f);
 
    vertexes[21] = vertex( 2.0f, -2.0f, 2.0f,  16.0f, 0.0f, 0.0f, 1.0f, 1.0f);
    vertexes[22] = vertex( 2.0f, 2.0f, -2.0f,  16.0f, 0.0f, 0.0f, 0.0f, 0.0f);
    vertexes[23] = vertex( 2.0f, 2.0f, 2.0f,  16.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 
    //низ
 
    vertexes[24] = vertex( -2.0f, -2.0f, -2.0f, 0.0f, -16.0f, 0.0f, 1.0f, 1.0f);
    vertexes[25] = vertex(  2.0f, -2.0f, -2.0f, 0.0f, -16.0f, 0.0f, 0.0f, 1.0f);
    vertexes[26] = vertex( -2.0f, -2.0f,  2.0f, 0.0f, -16.0f, 0.0f, 1.0f, 0.0f);
 
    vertexes[27] = vertex(  2.0f, -2.0f, -2.0f, 0.0f, -16.0f, 0.0f, 0.0f, 1.0f);
    vertexes[28] = vertex(  2.0f, -2.0f,  2.0f, 0.0f, -16.0f, 0.0f, 0.0f, 0.0f);
    vertexes[29] = vertex( -2.0f, -2.0f,  2.0f, 0.0f, -16.0f, 0.0f, 1.0f, 0.0f);
 
    //верх
 
    vertexes[30] = vertex( -2.0f, 2.0f, -2.0f, 0.0f,  16.0f, 0.0f, 0.0f, 1.0f);
    vertexes[31] = vertex( -2.0f, 2.0f,  2.0f, 0.0f,  16.0f, 0.0f, 0.0f, 0.0f);
    vertexes[32] = vertex(  2.0f, 2.0f, -2.0f, 0.0f,  16.0f, 0.0f, 1.0f, 1.0f);
 
    vertexes[33] = vertex( 2.0f, 2.0f, -2.0f, 0.0f,  16.0f, 0.0f, 1.0f, 1.0f);
    vertexes[34] = vertex(-2.0f, 2.0f,  2.0f, 0.0f,  16.0f, 0.0f, 0.0f, 0.0f);
    vertexes[35] = vertex( 2.0f, 2.0f,  2.0f, 0.0f,  16.0f, 0.0f, 1.0f, 0.0f);
 
    vertexBuff->Unlock();
 
    D3DXCreateTextureFromFile(device3D, L"decks1.dds", &tex);
}
 
void cubeDraw(IDirect3DDevice9* device3D)
{
    device3D->SetStreamSource(0, vertexBuff, 0, sizeof(vertex));
}
 
void cubeRelease()
{
    vertexBuff->Release();
}
 
void texRelease()
{
    tex->Release();
}
Сами ошибки:

Ошибка 1 error LNK2005: "struct IDirect3DVertexBuffer9 * vertexBuff" (?vertexBuff@@3PAUIDirect3DVertexBuffer9@@A) уже определен в cube.obj E:\C++_Project\DX\DX\main(endif).obj DX
Ошибка 2 error LNK2005: "struct IDirect3DTexture9 * tex" (?tex@@3PAUIDirect3DTexture9@@A) уже определен в cube.obj E:\C++_Project\DX\DX\main(endif).obj DX
Ошибка 3 error LNK1169: обнаружен многократно определенный символ - один или более E:\C++_Project\DX\Debug\DX.exe DX

Добавлено через 36 минут
Решилось все переносом этих двух строк:
C++
1
2
IDirect3DVertexBuffer9* vertexBuff = 0;
IDirect3DTexture9* tex = 0;
Из cube_func.h в cube.cpp. Ну и добавил еще одну функцию для усановки текстуры так как она из глобальной зоны видимости исчезла. Если не трудно, пожалуйста раскажите почему так происходило?)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2013, 07:55
Ответы с готовыми решениями:

Многократно определенный символ
Здравствуйте! У меня в модуле объявлено две функции. Одну из них я вызываю в мэйн. При сборке...

Многократно определенный символ
Приветствую! Проект разбит на 3 файла: Substrance.h class Substance{ friend Substance operator...

Многократно определенный символ. Где?
Подскажите пожалуйста, где многократно определенный символ? Начал разбираться в работе с классами,...

Обнаружен многократно определенный символ - один или более
Здравствуйте. Выскакивает ошибка: error LNK1169: обнаружен многократно определенный символ - один...

5
Don't worry, be happy
17583 / 10381 / 2006
Регистрация: 27.09.2012
Сообщений: 26,108
Записей в блоге: 1
30.08.2013, 09:22 2
Это
Цитата Сообщение от XpertVision Посмотреть сообщение
C++
1
2
IDirect3DVertexBuffer9* vertexBuff = 0;
IDirect3DTexture9* tex = 0;
из заголовка cube_func.h попадает в несколько cpp файлов.
Копайте в сторону extern тогда
0
17 / 17 / 10
Регистрация: 14.06.2012
Сообщений: 151
30.08.2013, 17:58  [ТС] 3
Extern не помагал. Помогло как и написал выше перенос в cpp файл относящийся к этом хедеру. Я просто не понимаю почему именно эти две строчки попадали во все файлы если они со всем содержимым были заключены в #ifndef.
0
Модератор
Эксперт по электронике
8657 / 6463 / 871
Регистрация: 14.02.2011
Сообщений: 22,572
31.08.2013, 14:41 4
Цитата Сообщение от XpertVision Посмотреть сообщение
Extern не помагал.
а как ты им пользовался

вот простейший пример
ты написал в h файле
C++
1
int i;
и подключил его к ста с файлам
в результате при компиляции у тебя будет сто переменных i и линкер запутается
необходимо так писать
в одном с файле
C++
1
int i;
а в h файле вот так
C++
1
extern int i;
тогда компилятор не будет создавать сто переменных а будет знать, что где то есть такая переменная
но если забудешь написать
C++
1
int i;
то взбунтуется уже линкер " использование не объявленной переменной"

Добавлено через 5 минут
Цитата Сообщение от XpertVision Посмотреть сообщение
Я просто не понимаю почему именно эти две строчки попадали во все файлы если они со всем содержимым были заключены в #ifndef.
ifndef защищает в одной единице трансляции (грубо говоря в одном с файле)
если напишешь так
C++
1
2
#include "my.h"
#include "my.h"
то защитит

а в разных уже не защищает
потому что одна единица трансляции создает один obj файл
а линкер их потом связывает
и один файл ты мог скомпилировать неделю назад, а другой сегодня

Я сам долгое время не мог этого понять
2
17 / 17 / 10
Регистрация: 14.06.2012
Сообщений: 151
31.08.2013, 20:13  [ТС] 5
Спасибо за подробное обьяснение. И с extern - да, в СРР файле обьекты не писал, только в Н.)
0
Модератор
Эксперт по электронике
8657 / 6463 / 871
Регистрация: 14.02.2011
Сообщений: 22,572
31.08.2013, 20:20 6
могу еще посоветовать
если у тебя больше одной глобальной переменной то можно сделать так
Global.c
C++
1
2
3
#include "Global.h"
int var1;
int var2;
Global.h
C++
1
2
extern int var1;
extern int var2;
и подключаешь Global.h ко всем файлам где используется глобальные переменные
тогда в случае чего не нужно бегать по всем файлам и искать где они объявлены, все будет в одном месте
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2013, 20:20
Помогаю со студенческими работами здесь

Обнаружен многократно определенный символ - один или более
Вот с толкнулся с такой проблемой. Решил методом написания extern в хейдер файле и вынесении...

LNK1169: обнаружен многократно определенный символ - один или более
Всем привет. Кто знает, из-за чего может быть такая ошибка? Main: #include &quot;stdafx.h&quot; ...

Обнаружен многократно определенный символ - один или более Visual Studio
Добрый день! Смотрите) Есть заголовочный файл, который по сути пустой using namespace std; class...

fatal error LNK1169: обнаружен многократно определенный символ - один или более
Искала в интернете решение этой проблемы, находила похожие, но не помогло своей... В общем....

Fatal error LNK1169: обнаружен многократно определенный символ - один или более
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;climits&gt; using std::cout; using std::cin;...

Fatal error LNK1169: обнаружен многократно определенный символ - один или более
Добрый день, подскажите пожалуйста как исправить ошибку? Есть заголовочный файл: #pragma once...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru