我正在研究一个简单的Breakout克隆,以练习我刚起步的C++技能。游戏的资源从名为“资源”的类中继承而来,该类由用于标识资源类型的ID和少数虚拟功能组成。到目前为止,该类如下所示:

class Resource {
private:
    int _id;
protected:
    enum ResourceType {
        TEXT
        , PADDLE
        , BALL
        , BRICK
    };
public:
    Resource(int resourceID) : _id{resourceID} {}
};

但是,为了使自己熟悉C++ 11,我想切换到作用域枚举。我确定我在这里遗漏了一些东西(毕竟代码不会编译!)。错误的修订代码如下:
class Resource {
private:
    ResourceType _id;
protected:
    enum class ResourceType : int {
        TEXT = 0
        , PADDLE
        , BALL
        , BRICK
    };
public:
    Resource(ResourceType resourceID) : _id{resourceID} {}
};

鉴于我收到的编译器错误(在ResourceType _id;行上出现“错误:'ResourceType'未命名类型”),似乎我可能需要在其他地方对我的枚举类进行原型(prototype)设计,但我的尝试徒劳无功。请指教!

最佳答案

您只需要在使用类型之前声明类型,如下所示:

class Resource {
protected:
    enum class ResourceType : int {
        TEXT = 0
        , PADDLE
        , BALL
        , BRICK
    };
private:
    ResourceType _id;
public:
    Resource(ResourceType resourceID) : _id{ resourceID } {}
};

08-17 04:01