2014-04-01 89 views
0

我得到这些错误消息错误LNK2019:解析外部符号错误

2> main.obj:错误LNK2019:解析外部符号 “公共:__thiscall CEngine :: CEngine(无效)”(?? 0CEngine @@ QAE @ XZ)函数引用_WinMain @ 16

2> main.obj:error LNK2019:无法解析的外部符号“public:void __thiscall CEngine :: SetWindowSize(int,int,char const *,int)” (?SetWindowSize @ CEngine @@ QAEXHHPBDH @ Z)函数中引用_WinMain @ 16

2> main.obj:错误LNK2019:无法解析的外部系统mbol“public:void __thiscall CEngine :: Begin(void)”(?Begin @ CEngine @@ QAEXXZ)in function _WinMain @ 16

2> main.obj:error LNK2019:无法解析的外部符号“public:int __thiscall “:错误LNK2019:在功能_WinMain引用@ 16

2> main.obj(GetDisplayWidth @ @@ CEngine QAEHXZ?)解析外部符号” CEngine :: GetDisplayWidth(无效)公共:整数__thiscall CEngine :: GetDisplayHeight(空隙)”(GetDisplayHeight @ @@ CEngine QAEHXZ)在功能_WinMain引用@ 16

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

这是我的解决方案:

解决方案 'delveenginetest'(2个项目)

DelveEngine

包括

delve.h

Engine.h

SetupSDL.h

stdafx.h中

Engine.cpp

Main.cpp的

SetupSDL.cpp

这是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项目成功生成了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; 
}; 

代码的代码,而delveenginetest项目失败。

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

+0

可能重复[什么是未定义的引用/未解析的外部符号错误,以及如何解决它?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-外部符号错误和怎么办我修复) –

+0

我见过,并没有帮助我在这种情况下 – user3485645

+0

不相关,但你不需要说空'虚空'参数列表在C++中。 –

回答

0

尽管你不为你的问题正确的诊断提供所有足够的信息的事实,我会尽力和大家分享我可以想像,可能是链接器错误的原因:

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

我会推荐给你的类/源文件从DelveEngine项目分离出来,以弥补静态或共享库,可从应用程序和测试框架,同时链接从一个单一的与解决方案中:

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支持安装项目消耗虚拟资源(想链接到实际构建环境源),但这可能可以替代如何设置应用程序和单元测试而无需额外的库。

相关问题