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

error LNK2019: unresolved external symbol error

本文关键字:错误 外部 符号 未解决 LNK2019      更新时间:2023-10-16

我收到这些错误消息

2>main.obj : 错误 LNK2019: 未解析的外部符号 "public: __thiscall CEngine::CEngine(void)" (??0CEngine@@QAE@XZ) 在函数 _WinMain@16 中引用

2>main.obj : 错误 LNK2019: 未解析的外部符号 "public: void __thiscall CEngine::SetWindowSize(int,int,char const *,int)" (?SetWindowSize@CEngine@@QAEXHHPBDH@Z) 在函数_WinMain@16中引用

2>main.obj : 错误 LNK2019: 未解析的外部符号 "public: void __thiscall CEngine::Begin(void)" (?Begin@CEngine@@QAEXXZ) 在函数_WinMain@16中引用

2>main.obj : 错误 LNK2019: 未解析的外部符号 "public: int __thiscall CEngine::GetDisplayWidth(void)" (?GetDisplayWidth@CEngine@@QAEHXZ) 在函数_WinMain@16中引用

2>main.obj : 错误 LNK2019: 未解析的外部符号 "public: int __thiscall CEngine::GetDisplayHeight(void)" (?GetDisplayHeight@CEngine@@QAEHXZ) 在函数_WinMain@16中引用

2>C:\用户\ethan\桌面\C++ 项目\delveenginetest\调试\delveenginetest.exe:致命错误LNK1120:5 个未解析的外部

这是我的解决方案:

解决方案"钻机测试"(2个项目)

德尔夫引擎

包括

德尔维·

发动机.h

设置SDL.h

stdafx.h

引擎.cpp

主.cpp

设置SDL.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 项目成功生成,而 delveenginetest 项目失败。

怎么了?我到处找都是有原因的,找不到适合我的。

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

  1. 我想你提到的项目delveenginetest旨在为DelveEngine项目中的类设置单元测试。
  2. 由于您在DelveEngine项目中有一个Main.cpp,我猜它只是构建为可执行文件(成功)。
  3. 您的delveenginetest需要链接到DelveEngine项目提供的类,但这实际上是不可能的,因为来自DelveEngine.exe不能用于链接,您需要一个库来将其导入另一个可执行文件(单元测试框架)。

我建议将类/源文件与项目中分离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支持设置消耗虚拟资源的项目(想想实际构建环境中的源代码链接),但这可能是一种替代方法如何设置应用程序和单元测试,而无需额外的库。

相关文章: