错误 LNK2019:未解决的外部符号错误
error LNK2019: unresolved external symbol error
我收到这些错误消息
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 项目失败。
怎么了?我到处找都是有原因的,找不到适合我的。
尽管您没有提供正确诊断问题的所有足够信息,但我会尝试分享我能想象到的可能是链接器错误的原因:
- 我想你提到的项目
delveenginetest
旨在为DelveEngine
项目中的类设置单元测试。 - 由于您在
DelveEngine
项目中有一个Main.cpp
,我猜它只是构建为可执行文件(成功)。 - 您的
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支持设置消耗虚拟资源的项目(想想实际构建环境中的源代码链接),但这可能是一种替代方法如何设置应用程序和单元测试,而无需额外的库。
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- Visual Studio 2017 中的 QtMetaObject 未解决的外部错误
- 外部"C"拆卸导致奇怪的链接器错误
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 外部函数在 main() 上调用时返回分段错误 11.(C++)
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- 每次我要使用外部资源时,我都会得到:collect2。exe:错误 ld 返回 1 退出状态
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- C#WPF和C++/CLI以及C++在C++/CLI中添加外部库错误
- 函数 LNK2019 "int __cdecl __scrt_common_main_seh(void)" 中引用的未解析外部符号主错误 (?__scrt_common_main_seh@@YAHXZ
- C++:在"try"外部创建的类型会导致错误,但在内部不会
- 编译错误外部接口Simulink
- 为什么这会给出多个定义错误:外部 int i;国际 i;.