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

时间:2014-04-01 18:01:55

标签: c++ visual-studio-2013

我收到这些错误消息

  

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:\ Users \ ethan \ Desktop \ C ++ Projects \ delveenginetest \ Debug \ delveenginetest.exe:致命错误LNK1120:5个未解析的外部

这是我的解决方案:

  

解决方案'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 :(得分:1)

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

  1. 我认为您提到的项目delveenginetest旨在为DelveEngine项目中的类设置单元测试。
  2. 由于您的Main.cpp项目中有DelveEngine,我猜它只是构建为可执行文件(已成功)。
  3. 您的delveenginetest需要链接到DelveEngine项目提供的课程,但这实际上是不可能的,因为来自.exe的{​​{1}}不能用于链接,你需要一个库将它导入另一个可执行文件(单元测​​试框架)。
  4. 我建议将您的类/源文件从DelveEngine项目中分离出来构成一个静态或共享库,它可以在一个VS解决方案中同时从应用程序和测试框架链接:

    DelveEngine

    由于我不熟悉它,我实际上并不知道,如果VS 2013支持设置消耗虚拟资源的项目(想想在实际构建环境中链接到源),这可以是一种替代方法,可以在不需要额外库的情况下设置应用程序和单元测试。