[英]C++ linker troubles with DirectX in Windows SDK
我正在为Windows 7和Windows 8编写游戏。我一直在使用VS2012。 因此,基本上,我正努力使自己了解Windows SDK。 d3dX10math已被替换,我对此表示同意,并在必要时包含DirectXMath.h。
链接器经常会出现问题。 它没有链接到必要的库。 它们就在外部依赖关系中(我假设旧的d3dx10math.lib已被这些.inl文件取代了吗?)。 我找不到等效的.lib文件,所以这就是我的假设。
它只是不想实际链接到它们。 我在线上搜索过高低,似乎没有人问过这个问题。 我觉得我错过了什么吗?
#ifndef _CDEVICE_H_
#define _CDEVICE_H_
//#include <vector>
#pragma once
//#pragma comment(lib, "dxgi.lib")
//#pragma comment(lib, "d3d11.lib")
#include <dxgi.h>
#include <d3d11.h>
#include <DirectXMath.h>
using namespace DirectX;
static class cDevice
{
public:
cDevice();
cDevice(const cDevice&);
~cDevice();
private:
static ID3D11Device* device;
static XMFLOAT2 float2;
} device;
#endif
然后我得到这个链接器错误
1>cDevice.obj : error LNK2001: unresolved external symbol "private: static struct DirectX::XMFLOAT2 cDevice::float2" (?float2@cDevice@@0UXMFLOAT2@DirectX@@A)
static XMFLOAT2 float2;
在您的标头中,作为类成员,要求您的项目中具有XMFLOAT2 Device::float2( 0, 0 );
0,0)的.cpp文件(例如CDevice.cpp XMFLOAT2 Device::float2( 0, 0 );
-或您希望拥有的任何初始值-实际声明该变量。 这使得CDevice::float2
成为CDevice::float2
的静态成员变量。 您已经声明您的CDevice具有static ID3D11Device* device;
,这又需要一个ID3D11Device* CDevice::device = nullptr;
的.cpp文件ID3D11Device* CDevice::device = nullptr;
在它链接。
另外,不要在标题中使用命名空间语句。 它们在.cpp文件中非常DirectX::XMFLOAT2
,但是在标头中,您应该使用全名,例如: DirectX::XMFLOAT2
。
像这样的.h:
static class cDevice
{
public:
cDevice();
cDevice(const cDevice&);
~cDevice();
private:
static ID3D11Device* device;
static DirectX::XMFLOAT2 float2;
} device;
将需要一个.cpp文件,如下所示:
#include "CDevice.h" using namespace DirectX;
using namespace DirectX;
ID3D11Device* CDevice::device = nullptr;
XMFLOAT2 CDevice::float2(0, 0);
而且,如果您曾经将.h包含在多个.cpp文件中,则您会发现每个.h文件中都具有自己不相关的CDevice副本。
我不知道为什么要这样做,因为这对设计没有太大意义(您应该在类CDevice
具有非静态变量,或者应该使用namespace CDevice
来代替,因为您不是实际使用对象封装,或者创建单例)。 您可能应该阅读有关C ++的入门知识,以获取这些内容的基础知识,因为它与DirectX完全无关,并且您对使用(公认的重载)关键字static
感到非常困惑。
我强烈建议你看一看使用SimpleMath包装为DirectXMath中的DirectX工具包 ,真是了DirectX工具包的休息过。
我还建议您迁移到VS 2013 Community Edition而不是VS 2012(Express for Windows Desktop?),并使用Direct3D Win32 Game模板来支持Windows 7。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.