Help with linking error.

Started by
1 comment, last by SSJCORY 20 years, 3 months ago
I tried to make a file with functions to initialize d3d and uninitialize it but when i did that i got these errors:

--------------------Configuration: BULLSHIT - Win32 Debug--------------------
Compiling...
D3DShit.cpp
Skipping... (no relevant changes detected)
win.cpp
Linking...
D3DShit.obj : error LNK2005: "void __cdecl InitMyD3D(struct HWND__ *,bool,int,int)" (?InitMyD3D@@YAXPAUHWND__@@_NHH@Z) already defined in win.obj
D3DShit.obj : error LNK2005: "void __cdecl KillMyD3D(void)" (?KillMyD3D@@YAXXZ) already defined in win.obj
D3DShit.obj : error LNK2005: "struct IDirect3DDevice8 * pd3dd" (?pd3dd@@3PAUIDirect3DDevice8@@A) already defined in win.obj
D3DShit.obj : error LNK2005: "struct IDirect3D8 * pd3d" (?pd3d@@3PAUIDirect3D8@@A) already defined in win.obj
Debug/BULLSHIT.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

BULLSHIT.exe - 5 error(s), 0 warning(s)
Here is the code in my D3D init file:

//D3DShit.cpp

#include<d3d8.h>
#include<d3dx8.h>
#pragma comment(lib,"d3d8.lib")
#pragma comment(lib,"d3dx8.lib")
LPDIRECT3D8 pd3d;
IDirect3DDevice8 *pd3dd;
void InitMyD3D(HWND hWnd,bool full,int width,int height){
	D3DPRESENT_PARAMETERS d3dpp;
	D3DDISPLAYMODE d3ddm;
	pd3d = Direct3DCreate8(D3D_SDK_VERSION);
	pd3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm);
	ZeroMemory(&d3dpp,sizeof(d3dpp));
	d3dpp.BackBufferCount = 1;
	d3dpp.hDeviceWindow = hWnd;
	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
	if(full){
		d3dpp.BackBufferWidth = width;
		d3dpp.BackBufferHeight = height;
		d3dpp.BackBufferFormat = D3DFMT_R5G6B5;
		d3dpp.Windowed = FALSE;
	}
	else{
		d3dpp.BackBufferFormat = d3ddm.Format;
		d3dpp.Windowed = TRUE;
	}
	pd3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&pd3dd);
	pd3dd->SetRenderState(D3DRS_LIGHTING,FALSE);
}
void KillMyD3D(){
	if(pd3d != NULL){
		pd3d->Release();
		pd3d = NULL;
	}
	if(pd3dd != NULL){
		pd3dd->Release();
		pd3dd = NULL;
	}
}
and here is when i try to use it:

//win.cpp

#include<windows.h>
#include"D3DShit.cpp"
bool gameover = false;
bool fullscreen = true;
int gwidth = 640;
int gheight = 480;
HINSTANCE gInstance;
HWND ghwnd;
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){
	switch(msg){
	case WM_DESTROY:
		gameover = true;
		break;
	case WM_KEYDOWN:
		gameover = true;
		break;
	}
	return DefWindowProc(hwnd,msg,wParam,lParam);
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE prevInstance,PSTR CmdLine,int iCmd){
	gInstance = hInstance;
	MSG msg;
	int full = MessageBox(NULL,"Fullscreen?",NULL,MB_YESNO);
	switch(full){
	case IDYES:
		fullscreen = true;
		break;
	case IDNO:
		fullscreen = false;
		break;
	}
	DWORD style;
	ULONG width, height;
	WNDCLASS wc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.hCursor = LoadCursor(NULL,IDC_ARROW);
	wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
	wc.lpfnWndProc = WndProc;
	wc.hInstance = gInstance;
	wc.lpszClassName = "Class";
	wc.lpszMenuName = NULL;
	wc.style = CS_OWNDC;
	RegisterClass(&wc);
	if(fullscreen){
		width = GetSystemMetrics(SM_CXSCREEN);
		height = GetSystemMetrics(SM_CYSCREEN);
		style = WS_POPUP;
	}
	else{
		width = gwidth;
		height = gheight;
		style = WS_OVERLAPPED|WS_SYSMENU;
	}
	ghwnd = CreateWindow("Class","Game",style,0,0,width,height,NULL,NULL,gInstance,NULL);
	ShowWindow(ghwnd,iCmd);
	UpdateWindow(ghwnd);
	InitMyD3D(ghwnd,fullscreen,gwidth,gheight);
	while(!gameover){
		if(PeekMessage(&msg,ghwnd,0,0,PM_REMOVE)){
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}
	KillMyD3D();
	return 0;
}
I dont know why it doesn''t work could someone nudge me in the right direction. I have never split up files before. But i dont want to have to do the direct3d initialization every time i code something. Thanks, Cory Favorite Quotes:Gandalf: You shall not pass!|Smeagol: We don''t need you!|Sloth: Hey you guys!|
Favorite Quotes:Gandalf: You cannot pass!|Smeagol: We don't need you!|Sloth: Hey you guys!|
Advertisement
You have to put your D3DShit function prototypes in a header and include the header. You never include the cpp file.
thanks man i just remembered taht


Favorite Quotes:Gandalf: You shall not pass!|Smeagol: We don''t need you!|Sloth: Hey you guys!|
Favorite Quotes:Gandalf: You cannot pass!|Smeagol: We don't need you!|Sloth: Hey you guys!|

This topic is closed to new replies.

Advertisement