我在我的代码中得到“只能在类中初始化静态const积分数据成员”。我已尝试搜索此错误,但无法将其应用于我的代码。这是我的代码:
#ifndef PROCESS_H
#define PROCESS_H
#pragma once
#include "Module.h"
#define SAFE_DELETE_VECTOR(vec) if (!vec.empty()) { \
for (auto& slot : vec) { \
delete slot; \
slot = nullptr; \
} \
}
class Process {
public:
Process();
~Process();
bool Attach(const std::string& ExeName);
void Detach();
bool Read(DWORD_PTR dwAddress, LPVOID lpBuffer, DWORD_PTR dwSize);
bool Write(DWORD_PTR dwAddress, LPCVOID lpBuffer, DWORD_PTR dwSize);
Module* GetModule(const std::string& ImageName);
HMODULE LoadRemote(const std::string& ImageName);
DWORD_PTR Scan(DWORD_PTR dwStart, DWORD_PTR dwSize, const char* pSignature, const char* pMask);
template<typename T>
T Read(DWORD_PTR dwAddress, const T& tDefault = T()) {
T tRet;
if (!Read(dwAddress, &tRet, sizeof(T))) {
return tDefault;
}
return tRet;
}
template<typename T>
bool Write(DWORD_PTR dwAddress, const T& tValue) {
return Write(dwAddress, &tValue, sizeof(T));
}
private:
bool DumpModList();
DWORD GetProcessIdByName(const std::string& name);
private:
HANDLE m_hProcess = NULL;
DWORD m_dwProcessId = NULL;
std::vector<Module*> m_pModList;
};
extern Process* process;
extern Module* client;
extern Module* engine;
#endif // PROCESS_H
发生在这里:
HANDLE m_hProcess = NULL;
我尝试过调整多项但失败了。 那么,任何人都可以帮忙吗?
答案 0 :(得分:1)
从声明中删除= NULL
,并在构造函数初始化列表中初始化成员:
Process::Process(): m_hProcess(NULL) { /* ... */ }
或升级到支持C ++ 11的编译器。
答案 1 :(得分:0)
Side nitpick:SAFE_DELETE_VECTOR
宏很糟糕,在C ++代码中没有位置。它无助于你加快速度。
您应该使用匿名命名空间函数,而不需要冗余的空检查:
namespace {
template <typename C> void safeDelete(C & container) {
for (auto & slot : container) {
delete slot;
slot = nullptr;
}
}
}