Hi guys,
I'm facing a problem I am having some trouble understanding. It's a linker error.
I'll paste my code here and then explain what the problem is.
DREAMD3DDeviceCaps.h
DREAMD3DDeviceCaps.cppCode:#ifndef _DREAMD3DDEVICECAPS_H #define _DREAMD3DDEVICECAPS_H #pragma once #define STRICT #define WIN32_LEAN_AND_MEAN #include <d3d9.h> #include <DXUT.h> #include <DXUTenum.h> class DREAMD3DDeviceCaps { private: //D3DCAPS9 *m_pDeviceCaps; CD3D9Enumeration *m_pD3D9Enumeration; public: DREAMD3DDeviceCaps( void ); ~DREAMD3DDeviceCaps( void ); CD3D9Enumeration* GetDeviceCaps( void ); // Static methods in charge of updating the capabilities list based on // the current options enabled for the adapter // Used by the configuration dialog //============================================================================ static void ChangedAdapter( void ); static void ChangedDevice( void ); static void ChangedAdapterFmt( void ); static void ChangedWindowMode( void ); //============================================================================ }; #endif
The problem is that I get a linker eror as follows:Code:#include "DREAMD3DDeviceCaps.h" DREAMD3DDeviceCaps::DREAMD3DDeviceCaps() { m_pD3D9Enumeration = DXUTGetD3D9Enumeration( false ); } DREAMD3DDeviceCaps::~DREAMD3DDeviceCaps() { } CD3D9Enumeration* DREAMD3DDeviceCaps::GetDeviceCaps( void ) { return m_pD3D9Enumeration; } void DREAMD3DDeviceCaps::ChangedAdapter( void ) { } void DREAMD3DDeviceCaps::ChangedDevice( void ) { } void DREAMD3DDeviceCaps::ChangedAdapterFmt( void ) { } void DREAMD3DDeviceCaps::ChangedWindowMode( void ) { }
So I figured that I wasn't linking to a library that I needed and so the DXUTGetD3D9Enumeration function was unresolved. But after searching on the net, there didn't seem to be a library missing. So out of desperation, I removed the constructor from the CPP file and rewrote the header file constructor as follows:Code:1>DREAMD3DDeviceCaps.obj : error LNK2019: unresolved external symbol "class CD3D9Enumeration * __stdcall DXUTGetD3D9Enumeration(bool)" (?DXUTGetD3D9Enumeration@@YGPAVCD3D9Enumeration@@_N@Z) referenced in function "public: __thiscall DREAMD3DDeviceCaps::DREAMD3DDeviceCaps(void)" (??0DREAMD3DDeviceCaps@@QAE@XZ)
And mysteriously, this links without a problem. It must be a really stupid mistake but I just can't see it so I turn to you guys in hopes that someone knows why this happens. As a last resort, I can just write the function in the header file but it's kind of dirty and I'm really curious to know what's causing the problem. Why does it link if I do it in the header file and doesn't link if I do it in the cpp file.Code:DREAMD3DDeviceCaps( void ){m_pD3D9Enumeration = DXUTGetD3D9Enumeration( false );}
Thanks



LinkBack URL
About LinkBacks


