提问人:Falcon Oscuro 提问时间:3/6/2020 最后编辑:Falcon Oscuro 更新时间:3/6/2020 访问量:696
调用继承类函数的未解析外部符号 [duplicate]
Unresolved External Symbol calling inherited class function [duplicate]
问:
我正在尝试让一个类从继承的类调用一个函数,但是每当我这样做时,我都会收到一个未解决的外部错误。我对为什么会发生这种情况感到困惑,因为所有文件似乎都已正确包含,我没有重写该函数并且Visual Studio在编译之前没有抱怨它。LNK2019
我试过:
运行用实际代码替换函数调用,这修复了两个错误之一,但我仍然得到一个未解决的外部问题,因为有问题的函数正在从另一个类调用另一个函数。
弄乱命名空间,因为继承的类位于单独的命名空间下,我认为这就是问题所在,例如.
Memory::Allocate(...)
直接调用类函数,所以我尝试了
Allocate(...)
Memory::GlobalMemoryUser::Allocate(...)
使用
this->...
来自 GlobalMemoryUser.h 的相关代码
#include "MemoryManager"
namespace Memory
{
namespace Internal
{
extern MemoryManager* GlobalMemoryManager;
{
class GlobalMemoryUser
{
public:
// Allocator and deallocator
inline const void* Allocate(size_t, const char* user);
inline const void DeAllocate(void*);
private:
// A pointer to the global memory manager
Internal::MemoryManager* GlobalMemoryManager;
};
}
来自 GlobalMemoryManager.cpp 的相关代码
#include "GlobalMemoryUser.h"
namespace Memory {
const void* GlobalMemoryUser::Allocate(size_t size, const char* user)
{
return GlobalMemoryManager->Allocate(size, user);
}
const void GlobalMemoryUser::DeAllocate(void* p)
{
GlobalMemoryManager->DeAllocate(p);
}
}
System Manager.h 中的相关代码
#include "GlobalMemoryUser.h"
namespace ECS
{
class SystemManager : public Memory::GlobalMemoryUser
{
// Constructor and Deconstructor
SystemManager();
~SystemManager();
};
}
来自系统管理器的相关代码.cpp
#include "SystemManager.h"
namespace ECS
{
SystemManager::SystemManager()
{
systemAllocator = new Memory::LinearAllocator(ECS_SYSTEM_MEMORYBUFFERSIZE, Allocate(ECS_SYSTEM_MEMORYBUFFERSIZE, "SystemManager"));
}
SystemManager::~SystemManager()
{
for (std::vector<ISystem*>::reverse_iterator it = systemWorkOrder.rbegin(); it != systemWorkOrder.rend(); it++)
{
(*it)->~ISystem();
*it = nullptr;
}
systemWorkOrder.clear();
systemsTable.clear();
DeAllocate((void*)systemAllocator->GetUsedMemoryStart());
delete systemAllocator;
systemAllocator = nullptr;
}
}
当尝试从 GlobalMemoryUser 父类调用分配器和解除分配器时,系统管理器的构造函数和解构函数中会发生相关错误。
确切的错误消息:LNK2019 unresolved external symbol "public: void const * __cdecl Memory::GlobalMemoryUser::Allocate(unsigned __int64,char const *)" (?Allocate@GlobalMemoryUser@Memory@@QEAAPEBX_KPEBD@Z) referenced in function "public: __cdecl ECS::SystemManager::SystemManager(void)" (??0SystemManager@ECS@@QEAA@XZ)
答: 暂无答案
评论
SystemManager
GlobalMemoryUser
inline