错误LNK2001:未解析的外部符号

时间:2010-06-16 02:42:24

标签: c++ c visual-studio visual-studio-2008 visual-c++

我收到此错误

>GXRenderManager.obj : error LNK2001: unresolved external symbol "private: static class GXRenderer * GXRenderManager::renderDevice" (?renderDevice@GXRenderManager@@0PAVGXRenderer@@A)

以下是我的代码......

GXDX.h

class GXDX: public GXRenderer {
public:
    void Render();
    void StartUp();
};

GXGL.h

class GXGL: public GXRenderer {
public:
    void Render();
    void StartUp();
};

GXRenderer

class GXRenderer {
public:
    virtual void Render() = 0;
    virtual void StartUp() = 0;

};

GXRenderManager.h

#ifndef GXRM
#define GXRM
#include <windows.h>
#include "GXRenderer.h"
#include "GXDX.h"
#include "GXGL.h"

enum GXDEVICE {
    DIRECTX,
    OPENGL
};

class GXRenderManager {
public:
    static int Ignite(GXDEVICE);

private:
    static GXRenderer *renderDevice;

};

#endif

GXRenderManager.cpp

#include "GXRenderManager.h"

    int GXRenderManager::Ignite(GXDEVICE DeviceType)
    {
        switch(DeviceType)
        {
        case DIRECTX:
            GXRenderManager::renderDevice = new GXDX;
            return 1;
            break;
        case OPENGL:
            GXRenderManager::renderDevice = new GXGL;
            return 1;
            break;
        default:
            return 0;
        }
    }

的main.cpp

#include "GXRenderManager.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    return 0;
}

我不想让它做任何事情。我只是想编译没有错误。如果有人能帮我一把,那我就是新人了。那挺棒的。感谢

2 个答案:

答案 0 :(得分:6)

您需要静态成员GXRenderer::renderDevice的实际定义(或实例)。该类声明了它,但需要在一个地方对它进行定义。

在你的GXRenderManager.cpp文件中有一行如下:

GXRenderer * GXRenderer::renderDevice = NULL;

或任何适当的初始化。

答案 1 :(得分:1)

  

在Visual Studio C ++中,转到   工具 - &GT;选项 - &GT;项目 - &GT; VC ++   目录并选择“显示   目录:“在右上角   手角并选择“包含文件”    - 然后输入找到您正在使用的头文件的文件夹。

     

也去   项目 - &gt;属性 - &gt;链接器 - &gt;输入 - &gt;其他依赖项并输入完整路径   您正在使用的库文件

了解更多信息: http://www.codeguru.com/forum/showthread.php?t=289136