我收到这些错误消息
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项目失败。
怎么了?我到处寻找是有原因的,找不到适合我的。
答案 0 :(得分:1)
尽管您没有提供所有足够的信息来正确诊断您的问题,但我会尝试分享我可能想到的可能是链接器错误的原因:
delveenginetest
旨在为DelveEngine
项目中的类设置单元测试。Main.cpp
项目中有DelveEngine
,我猜它只是构建为可执行文件(已成功)。delveenginetest
需要链接到DelveEngine
项目提供的课程,但这实际上是不可能的,因为来自.exe
的{{1}}不能用于链接,你需要一个库将它导入另一个可执行文件(单元测试框架)。我建议将您的类/源文件从DelveEngine
项目中分离出来构成一个静态或共享库,它可以在一个VS解决方案中同时从应用程序和测试框架链接:
DelveEngine
由于我不熟悉它,我实际上并不知道,如果VS 2013支持设置消耗虚拟资源的项目(想想在实际构建环境中链接到源),这可以是一种替代方法,可以在不需要额外库的情况下设置应用程序和单元测试。