创建类时已定义的未解析外部符号
Unresolved external symbol already defined when creating class
我正在努力理解为什么这个符号没有定义,尽管它是在主.cpp中定义的。代码如下:
内存类:
#pragma once
#include "CrownIncludes.h"
class Memory {
public:
template<typename T>
inline T Read(std::uintptr_t ptrAddress) const
{
T val = T();
ReadProcessMemory(procHandle, (LPCVOID)ptrAddress, &val, sizeof(T), NULL);
return val;
}
private:
HANDLE procHandle = Settings::pHandle;
};
皇冠包含.h
#pragma once
#include <Windows.h>
#include <TlHelp32.h>
#include <Psapi.h>
#include <iostream>
#include "Global.h"
using namespace Global;
#include "Crown.h"
#include "Memory.h"
皇冠.cpp:
#include "CrownIncludes.h"
//#include "Memory.h"
void Crown::Setup() {
std::cout << "Crown loading..." << std::endl;
Memory* MemoryManager = new Memory();
DWORD LocalPlayer = 0x0;
MemoryManager->Read(0x02C8 + 0x0390, LocalPlayer);
std::cout << LocalPlayer << std::endl;
}
主.cpp:
...
std::cout << "Success! (" << TargetProcess->GetHandle() << ")" << std::endl;
HANDLE pHandle = TargetProcess->GetHandle();
// Main
Crown::Setup();
...
错误:
Fehler LNK2001 Nicht aufgelöstes externes Symbol ""void * Global::Settings::pHandle" (?pHandle@Settings@Global@@3PEAXEA)" Crown.obj
当取消注释 Memory* MemoryManager = new Memory(); 代码虽然有效。 (所以我猜内存类找不到 pHandle)
你现在可能已经想通了,但无论如何,我都会为未来的读者回答。
如果您使用的是 C++11(或更高版本)并且只想将procHandle
初始化为null
:
// (Memory.h)
//...
HANDLE procHandle = nullptr;
大功告成。
我认为您混淆了两种不同的pHandle
标识符。main()
中定义了pHandle
,但它是局部变量,与错误所指Global::Settings::pHandle
不同。您尚未提供后者的代码,因此仅根据错误,您尚未对其进行初始化Global.cpp
或Settings.cpp
(Global::Settings
的 cpp 文件)。
修复程序是确保在相关的 cpp 文件中初始化Global::Settings::pHandle
:
// (Global.cpp/Settings.cpp)
//...
HANDLE Global::Settings::pHandle = nullptr;
或者,在类中初始化它:
// (Global.h/Settings.h)
//...
HANDLE pHandle = nullptr;
在Memory.h
中,你正在初始化procHandle
Settings::pHandle
,根据错误和你似乎正在用它做什么,这表明Settings::pHandle
不能是constexpr。数据成员只能在类中初始化为 constexpr 值,否则必须使用构造函数,因为需要在运行时读取非 constexpr 值。
// If Settings::pHandle is constexpr. i.e. pHandle is a nullptr alias.
//...
HANDLE procHandle = Settings::pHandle;
//...
// If Settings::pHandle is NOT constexpr.
//...
Memory() :
procHandle(Settings::pHandle) {}
//...
private:
HANDLE procHandle;
//...
相关文章:
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 未解析的外部符号_MsiLocateComponentW@12.
- 在C++中使用 gRPC 时未解析的外部符号
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 仅在少数方法(静态或共享库)中解析的外部符号
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 使用静态 constexpr 成员的未解析外部符号
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- Dlib LNK2001未解析的外部符号USER_ERROR__consistent_build_configurati
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- 类模板上一个特定函数的未解析外部符号
- LNK2001:未解析的外部符号public:static类std::vector