我正在为我的游戏设置一个状态系统,并且遇到了有关枚举的问题。我正在尝试做的是定义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;
        }
    }
    

    10-08 07:55