我收到这些错误消息
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 回答
尽管您没有提供所有足够的信息来正确诊断您的问题,但我会尝试分享我可能想到的可能是链接器错误的原因:
我想你提到的项目
delveenginetest
是为DelveEngine
项目中的类设置单元测试 .由于
DelveEngine
项目中有一个Main.cpp
,我只需构建一个可执行文件(成功) .你的
delveenginetest
需要链接到DelveEngine
项目提供的类,但实际上这是不可能的,因为DelveEngine
来自DelveEngine
需要一个库将它导入另一个可执行文件(单元测试框架) .我建议从
DelveEngine
项目中分离出您的类/源文件,以组成一个静态或共享库,可以从一个VS解决方案中同时从应用程序和测试框架链接:实际上,我知道,如果VS 2013支持设置消耗虚拟资源的项目(想想实际构建环境中的源代码链接),但这可以替代如何设置应用程序和单元测试而无需额外的库 .