首页 文章

错误LNK2019:未解决的外部符号错误

提问于
浏览
0

我收到这些错误消息

2> main.obj:错误LNK2019:函数_WinMain @ 16 2> main.obj中引用的未解析的外部符号“public:__thiscall CEngine :: CEngine(void)”(?? 0CEngine @@ QAE @ XZ):错误LNK2019:解析的外部符号 “公共:无效__thiscall CEngine :: SetWindowSize(INT,INT,字符常量*,INT)”(SetWindowSize @ @@ CEngine QAEXHHPBDH @ Z?)在功能_WinMain引用@ 16 2> main.obj:错误LNK2019:解析的外部符号 “公共:无效__thiscall CEngine ::开始(无效)”,在功能_WinMain引用@ 16 2> main.obj(开始@ @@ CEngine QAEXXZ):错误LNK2019:解析外部符号“公共:INT __thiscall CEngine: :GetDisplayWidth“在功能_WinMain引用@ 16 2> main.obj(GetDisplayWidth @ @@ CEngine QAEHXZ):错误LNK2019:解析外部符号 “(无效)公共:INT __thiscall CEngine :: GetDisplayHeight(无效)”(GetDisplayHeight @函数_WinMain @ 16 2> C:\ Users \ ethan \ Desktop \ C Projects \ delveenginetest \ Debug \ delveenginetest.exe中引用的CEngine @@ QAEHXZ:致命错误LNK1120:5 unresolv ed externals

这是我的解决方案:

解决方案'delveenginetest'(2个项目)DelveEngine包含delve.h Engine.h SetupSDL.h stdafx.h Engine.cpp Main.cpp SetupSDL.cpp

这是 Engine.h 的代码

#pragma once
#include "SetupSDL.h"

class CEngine
{
public:
    CEngine(void);
    ~CEngine(void);

    void SetWindowSize(int winW, int winH, const char* GameName, int windowMode);
    void Begin(void);

    int GetDisplayWidth(void);
    int GetDisplayHeight(void);
private:
    int deskW;
    int deskH;

    bool playing;
    CSetupSDL* sdl_setup;
};

代码 Engine.cpp

#include "Include/stdafx.h"
#include "Include/Engine.h"

CEngine::CEngine(void)
{
    playing = true;

    deskW = GetSystemMetrics(SM_CXSCREEN);
    deskH = GetSystemMetrics(SM_CYSCREEN);
}


CEngine::~CEngine(void)
{
}

void CEngine::SetWindowSize(int winW, int winH, const char* GameName, int windowMode)
{
    // set up SDL for use
    sdl_setup = new CSetupSDL(winW, winH, GameName, windowMode);
}

void CEngine::Begin(void)
{
    while (playing && sdl_setup->GetMainEvent()->type != SDL_QUIT)
    {
        sdl_setup->Begin();
        sdl_setup->End();
    }

    playing = false;
}

int CEngine::GetDisplayWidth(void){ return deskW; }
int CEngine::GetDisplayHeight(void){ return deskH; }

DelveEngine项目成功构建,而deveenginetest项目失败 .

怎么了?我到处找了一个理由,找不到适合我的 .

1 回答

  • 0

    尽管您没有提供所有足够的信息来正确诊断您的问题,但我会尝试分享我可能想到的可能是链接器错误的原因:

    • 我想你提到的项目 delveenginetest 是为 DelveEngine 项目中的类设置单元测试 .

    • 由于 DelveEngine 项目中有一个 Main.cpp ,我只需构建一个可执行文件(成功) .

    • 你的 delveenginetest 需要链接到 DelveEngine 项目提供的类,但实际上这是不可能的,因为 DelveEngine 来自 DelveEngine 需要一个库将它导入另一个可执行文件(单元测试框架) .

    我建议从 DelveEngine 项目中分离出您的类/源文件,以组成一个静态或共享库,可以从一个VS解决方案中同时从应用程序和测试框架链接:

    Solution 'DelveEngine' (3 projects)  
       DelveEngineLib (project [.lib/.dll])
          Include  
             delve.h   
             Engine.h   
             SetupSDL.h   
          Engine.cpp
          SetupSDL.cpp
       DelveEngine (project [.exe])
          Main.cpp
       delveenginetest (project [.exe])
          Main.cpp (TestFramework main definition)
    

    实际上,我知道,如果VS 2013支持设置消耗虚拟资源的项目(想想实际构建环境中的源代码链接),但这可以替代如何设置应用程序和单元测试而无需额外的库 .

相关问题