Как вы делитесь экземпляром перечисления между различными единицами перевода в C ++? - PullRequest
0 голосов
/ 27 мая 2018

Я настраиваю систему состояний для своей игры и столкнулся с проблемой, связанной с Enums.Я пытаюсь определить экземпляр перечисления APP_STATE и разделить его между различными единицами перевода.

Код:

// APP_STATE.h

 #pragma once
 enum class APP_STATE : signed char { RUNNING = 2, LOAD = 1, EXIT = 0, FORCE_QUIT = -1 };

// Source.cpp

#include "APP_STATE.h"
APP_STATE appState = APP_STATE::RUNNING;

// Other.cpp

#include "APP_STATE.h"

namespace other {
    extern APP_STATE appState;

    void foo () {
        appState = APP_STATE::EXIT; // causes a LNK1120 and LNK2001 error, unresolved extrernal symbol
    }
}

1 Ответ

0 голосов
/ 27 мая 2018

Вы определили два различных экземпляра APP_STATE:

  • Один из них назван ::appState: он находится в глобальном пространстве имен, объявлен в APP_STATE.h и определен вSource.cpp.
  • Другой с именем other::appState: он находится в пространстве имен other, объявлен в Other.cpp, но никогда не определен, следовательно, ошибка.

В Other.cpp, вы должны переместить объявление extern APP_STATE appState; за пределы пространства имен:

// Other.cpp

#include "APP_STATE.h"

extern APP_STATE appState;

namespace other {

    void foo () {
        appState = APP_STATE::EXIT;
    }
}
...