繁体   English   中英

如何访问结构和枚举成员组成的类?

[英]How to access struct and enum members form a class?

这似乎是一个简单的问题,有一个简单的解决方案,但这对我来说已经有一段时间了。 我在说的是这段代码:

class MainWindow
{
    public:

        enum class Difficulty
        {
            Beginner,
            Intermediate,
            Advanced
        };

        struct DifficultyLevelsProperties
        {
            struct BeginnerProperties
            {
                const int PADDING_HEIGHT = 9;
                const int PADDING_WIDTH = 9;
                const int MINES = 10;
            };

            struct IntermediateProperties
            {
                const int PADDING_HEIGHT = 16;
                const int PADDING_WIDTH = 16;
                const int MINES = 40;
            };

            struct AdvancedProperties
            {
                const int PADDING_HEIGHT = 16;
                const int PADDING_WIDTH = 40;
                const int MINES = 99;
            };
        };

        MainWindow();
        ~MainWindow();

    private:

        Difficulty difficulty = Difficulty::Beginner;
        int mines = DifficultyLevelsProperties::BeginnerProperties.MINES;
        int paddingHeight =  DifficultyLevelsProperties::BeginnerProperties.PADDING_HEIGHT;
        int paddingWidth = DifficultyLevelsProperties::BeginnerPropertiesPADDING_WIDTH;

我想要达到的目标是显而易见的。 我尝试使用“。”进行多种组合。 和“ ::”运算符放在不同的位置或将其设为静态,但仍然无法正确操作。 我或者收到“'Difficulty'不是类或名称空间”错误或“'之前的预期主表达式”。 令牌”。 请帮忙。 谢谢!

我正在查看代码的问题是,您正在尝试访问未实例化的值。 我的意思是,当您尝试为mines属性分配值时,您引用的是声明,而不是实例化的值,因为没有实例化任何内容。

当您声明某些内容时,您将在不分配任何值或行为的情况下说明存储器的结构。

枚举之所以有效,是因为符号名被映射到一个值中(以前是直接将其映射到int类型中),因此在引用符号值时不会出错。 这是不同的成minespaddingHeightpaddingWidth 下面的代码为我工作:

class MainWindow
{
    public:

        enum class Difficulty
        {
            Beginner,
            Intermediate,
            Advanced
        };

        struct DifficultyLevelsProperties
        {
            struct BeginnerProperties
            {
                const int PADDING_HEIGHT = 9;
                const int PADDING_WIDTH = 9;
                const int MINES = 10;
            } beginner;

            struct IntermediateProperties
            {
                const int PADDING_HEIGHT = 16;
                const int PADDING_WIDTH = 16;
                const int MINES = 40;
            } intermediate;

            struct AdvancedProperties
            {
                const int PADDING_HEIGHT = 16;
                const int PADDING_WIDTH = 40;
                const int MINES = 99;
            } advanced;
        } levelProperties;

        MainWindow();
        ~MainWindow();

    private:

        Difficulty difficulty = Difficulty::Beginner;
        int mines = levelProperties.beginner.MINES;
        int paddingHeight = levelProperties.beginner.PADDING_HEIGHT;
        int paddingWidth = levelProperties.beginner.PADDING_WIDTH;
};

顺便说一句,从SOLID原则的角度来看,设计可能不是最佳的。 您正在混合使用MainWindow处理属性。 也许最好从MainWindow中提取该功能。

祝您扫雷快乐;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM