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

Posted

技术标签:

【中文标题】错误 LNK2001:未解析的外部符号【英文标题】:error LNK2001: unresolved external symbol 【发布时间】:2010-06-16 02:42:23 【问题描述】:

我收到此错误

>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;

我不想让它做任何事情。我只是想编译没有错误。我对这一切都很陌生,所以如果有人可以帮我一把。那挺棒的。谢谢

【问题讨论】:

【参考方案1】:

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

在你的 GXRenderManager.cpp 文件中有这样一行:

GXRenderer * GXRenderer::renderDevice = NULL;

或任何可能合适的初始化。

【讨论】:

你知道,我之前确实是这样做的,只是我没有添加 astricks。所以我想我将位置设置为空。谢谢【参考方案2】:

在 Visual Studio C++ 中,转到 工具->选项->项目->VC++ 目录并选择“显示 目录:”在右上角 手角并选择“包含文件” -- 然后进入你要使用的头文件所在的文件夹。

也去 Project->Properties->Linker->Input->Additional Dependencies 并输入完整路径 你正在使用的库文件

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

【讨论】:

感谢您的回复。我所有的头文件都与 main.cpp 和 vproj 文件位于同一位置(就物理驱动器而言)。我以前从未需要添加与项目文件和源文件位于同一文件夹中的头文件的路径。我不明白为什么现在会有很大的不同。所有这些文件都是我在项目范围内(在解决方案资源管理器中)创建的文件 问题是你的链接器找不到这些函数的定义。您很可能忘记将定义这些功能的模块添加到项目中。 还要注意:它是包含类定义的标题。实际实现很可能在“.lib”文件中。您需要阅读您的库的文档并注意您需要对 .lib 文件执行哪些操作,以及将标头添加到您的源代码中。

以上是关于错误 LNK2001:未解析的外部符号的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

从 C++ 连接 MySQL:错误 LNK2001:未解析的外部符号 [重复]

为啥错误 LNK2001:在这种情况下无法解析外部符号? [复制]

radial.o:错误 LNK2001:无法解析的外部符号 lambda_fatal 错误 LNK1120:8 个无法解析的外部,error.failed 退出状态为 1120