只能在类中初始化静态const积分数据成员

时间:2015-03-29 08:38:01

标签: c++

我在我的代码中得到“只能在类中初始化静态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;

我尝试过调整多项但失败了。 那么,任何人都可以帮忙吗?

2 个答案:

答案 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;
  }
}
}