我正在为我的游戏设置一个状态系统,并且遇到了有关枚举的问题。我正在尝试做的是定义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
}
}
最佳答案
您已经定义了APP_STATE
的两个不同实例:
::appState
:它在全局 namespace 中,在APP_STATE.h
中声明,并在Source.cpp
中定义。 other::appState
:它在命名空间other
中,在Other.cpp
中声明,但从未定义,因此出错。 在
Other.cpp
中,应将extern APP_STATE appState;
的声明移至 namespace 之外:// Other.cpp
#include "APP_STATE.h"
extern APP_STATE appState;
namespace other {
void foo () {
appState = APP_STATE::EXIT;
}
}