• Advertisement

Archived

This topic is now archived and is closed to further replies.

Stupid link errors!!!

This topic is 5950 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I keep getting these stupid errors every time I compile: player.obj : error LNK2005: "struct sTile (* map)[5]" (?map@@3PAY04UsTile@@A) already defined in class_func.obj functions.obj : error LNK2005: "struct sTile (* map)[5]" (?map@@3PAY04UsTile@@A) already defined in class_func.obj game.obj : error LNK2005: "struct sTile (* map)[5]" (?map@@3PAY04UsTile@@A) already defined in class_func.obj Game___Win32_Debug/Game.exe : fatal error LNK1169: one or more multiply defined symbols found Error executing link.exe. I do multiple includes in class_func.cpp, player.cpp, and etc., and I made sure to use
#ifndef PLAYER
#define PLAYER

//code goes here

#endif
 
but I still get these dumb errors!

Share this post


Link to post
Share on other sites
Advertisement
You are defining ''map'' in the header. Every source-file/module that includes this header will therefore get it''s own definition of map, and these multiple definitions will clash at link-time. The solution is to declare ''map'' extern in the header, and define it in exactly one source-file.

Share this post


Link to post
Share on other sites
I have found that I get this error if I do certain defines before includes like:

#define INITGUID
#define WIN32_LEAN_AND_MEAN
#include
#include

INSTEAD OF

#include
#include
#define INITGUID
#define WIN32_LEAN_AND_MEAN

once again, I''m not an expert so I am just saying ONE thing that has caused these kind of errors for me.

Share this post


Link to post
Share on other sites
quote:
Original post by CruxMihiAncora
I have found that I get this error if I do certain defines before includes [remove examples]

Those defines alter the behavior of the includes, so if you''re getting errors by placing them before the headers, you''re doing something wrong.

#define INITGUID, for example, should come before virtually all includes; #define WIN32_LEAN_AND_MEAN causes the inclusion of windows.h to exclude rarely used stuff - declaring it after the include is redundant.



I wanna work for Microsoft!

Share this post


Link to post
Share on other sites
I hate to post this whole code segment, but any idea what I am doing wrong here? When I put the defines before the includes I get the same type of errors that Kaezin is getting. However, if I put the defines after the includes, it compiles just fine:

      
#ifndef __ENGINE_H__
#define __ENGINE_H__

// standard includes

#include <d3d8.h>
#include <d3dx8.h>
#include <stdio.h>

// standard defines

#define INITGUID
#define WIN32_LEAN_AND_MEAN

class CEngine {

public:

// ******* VARIABLES ******* //


// window handles

HINSTANCE m_hInstance;
HWND m_hWnd;



// ******* FUNCTIONS ******* //


int iInit3D( void );
void vRenderScene( void );

// Constructor and Destructor

CEngine( );
~CEngine( );

private:

// ******* VARIABLES ******* //


// direct3d globals

LPDIRECT3D8 m_pD3D;
LPDIRECT3DDEVICE8 m_pD3DDevice;
D3DXMATRIX m_matProj; // projection data

D3DXMATRIX m_matCameraView; // camera data

D3DXVECTOR3 m_vecCameraSource;
D3DXVECTOR3 m_vecCameraTarget;
LPDIRECT3DVERTEXBUFFER8 m_lpVertexBuffer;

// definition for our vertex shader

#define D3DFVF_MYVERTEX (D3DFVF_XYZ | D3DFVF_TEX1)

// vertex structure

typedef struct MYVERTEX {
float x;
float y;
float z;
float u;
float v;
} MYVERTEX, *LPMYVERTEX;

// global vertices

MYVERTEX m_Vertices[4];


// ******* FUNCTIONS ******* //


void vSetupView( void );
};

#endif



Yikes!!! This really expands the tabs. Sorry about the code being so wide.

Edited by - CruxMihiAncora on November 8, 2001 2:15:10 AM

Edited by - CruxMihiAncora on November 8, 2001 2:16:21 AM

Edited by - CruxMihiAncora on November 8, 2001 2:17:23 AM

Share this post


Link to post
Share on other sites

  • Advertisement