Я получаю ошибку нарушения доступа во время выполнения при определении статической переменной класса. Я не совсем уверен, что именно происходит неправильно; это статическая функция, которую я вызываю не реализована во время вызова, что-то еще?Вызов функции статического члена вызывает ошибку времени выполнения
Что происходит не так и как я могу это исправить?
Ошибка выполнения (см ниже код для линии, что происходит ошибка):
0xC0000005: Нарушение прав доступа чтения местоположение 0x00000000.
Код:
// Status.h
class Status
{
public:
// Static Properties//
static const Status CS_SUCCESS;
// Static Functions //
static const Status registerState(const tstring &stateMsg)
{
int nextStateTmp = nextState + 1;
auto res = states.emplace(std::make_pair(nextStateTmp, stateMsg));
return (res.second) ? Status(++nextState) : Status(res.first->first);
}
private:
static std::unordered_map<STATE, tstring> states;
static STATE nextState;
};
// Status.cpp
#include "stdafx.h"
#include "Status.h"
// Class Property Implementation //
State Status::nextState = 50000;
std::unordered_map<STATE, tstring> Status::states;
const Status S_SUCCESS = Status::registerState(_T("Success"));
// IApp.h
class IApp : protected Component
{
public:
static const Status S_APP_EXIT;
static const Status S_UNREGISTERED_EVT;
...
};
// IApp.cpp
#include "stdafx.h"
#include "../EventDelegate.h"
#include "../Component.h"
#include "IApp.h"
// Class Property Implementation //
const Status IApp::S_APP_EXIT = CStatus::registerState(_T("IApp exit")); // Runtime error: 0xC0000005: Access violation reading location 0x00000000.
const Status IApp::S_UNREGISTERED_EVT = CStatus::registerState(_T("No components registered for this event"));
Две вещи: 1) Вы использовали отладчик для отладки вашего приложения, а если нет, почему бы и нет? 2) Вместо публикации различных случайных частей вашего кода, которые не могут быть скомпилированы самостоятельно, вам нужно опубликовать минимальный, полный, проверенный пример, см. Http://stackoverflow.com/help/mcve для получения дополнительной информации. Я ничего не вижу в вашем вопросе, который характерен для платформы Microsoft Windows, поэтому ваш минимальный, полный, проверенный пример должен быть компилируемым и исполняемым на любой платформе. –