Beginners #define vertex problem

Started by
0 comments, last by Aiursrage2k 17 years, 10 months ago
Hi all, how are we all? I hope you guys might be able to help me out with this, I'm just starting out with direct3d programming and so I'm editing a bit of code from toymaker.info, I'm just trying to get a simple triangle showing on the screen splitting who bits of code so i have a dedicated direct3d initialisation sequence. Starting in the main.cpp:


#include <windows.h>
#include "vis_setup.h"

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

// The main entry point of our Windows program
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	// Create and fill out a window class structure
	WNDCLASS wcex;
	ZeroMemory(&wcex,sizeof(WNDCLASS));

[... more windows stuff going on here]
So thats the initial start up, moving on the vis_seup.h:

#include <d3dx9.h>		// D3DX helper functions

LPDIRECT3D9 gD3dObject=NULL;
LPDIRECT3DDEVICE9 gD3dDevice=NULL;
LPDIRECT3DVERTEXBUFFER9	gVertexBuffer=NULL;

struct TMyVertex
{
D3DXVECTOR3 p;	// Vertex position	
D3DCOLOR c;	// Vertex colour
};

#define MYVERTEX_FVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)
class vis_setup
{
public:

	
	vis_setup(void);
	bool InitialiseDirect3D(HWND hWnd);
	bool CreateTriangle();
And when i want to use MYVERTEX_FVF i do it like this:

bool vis_setup::CreateTriangle()
{
	
	HRESULT hr=gD3dDevice->CreateVertexBuffer(3*sizeof(TMyVertex),D3DUSAGE_WRITEONLY, MYVERTEX_FVF,
			D3DPOOL_MANAGED, &gVertexBuffer, NULL );
	if (FAILED(hr))
		return false;

	// Lock and fill
	TMyVertex* pVertices=NULL;
This all looks alright to me but when i compile I get errors like this:

Triangle fatal error LNK1169: one or more multiply defined symbols found
Triangle error LNK2005: "struct IDirect3DVertexBuffer9 * gVertexBuffer" (?gVertexBuffer@@3PAUIDirect3DVertexBuffer9@@A) already defined in main.obj
I dunno whats up with it, I've never being exactly confident with #defines (My c++ skills need ALOT of work) but I can't really see whats wrong with this. Anyone know?
Advertisement
First, make sure to use the source tags.

You are defining a global variable: which is getting included in multiple files. One way you might get around that is, putting your variables in a class/struct.

IE
struct globals{  LPDIRECT3DVERTEXBUFFER9	gVertexBuffer;  globals()  {      gVertexBuffer=NULL;  }};
Insufficent Information: we need more infromationhttp://staff.samods.org/aiursrage2k/

This topic is closed to new replies.

Advertisement