如何访问struct和enum成员组成一个类?

时间:2017-12-29 16:37:01

标签: c++ struct enums

这似乎是一个简单的问题,一个简单的解决方案,但它一直是我的问题。我正在谈论的是这段代码:

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;

我想要实现的目标非常明显。我尝试了很多使用“。”的组合。和“::”运算符在不同的地方或使它们静止,但我仍然无法正确。我得到“'难度'不是一个类或命名空间”错误或“在'之前预期的主要表达式'。”令牌”。请帮忙。谢谢!

1 个答案:

答案 0 :(得分:1)

我在查看代码时遇到的问题是您正在尝试访问未实例化的值。我的意思是,当您尝试为summarise_all(funs(sum(. > 1)))属性赋值时,您正在引用声明,但不是实例化的值,因为没有实例化任何内容。

当您声明某些内容时,您正在解释如何在不指定任何值或行为的情况下构建内存。

枚举正在工作,因为符号名称被映射到一个值(旧的时候它被直接映射到一个int类型),所以当你引用符号值时你不会得到错误。这与minesminespaddingHeight不同。下面的代码对我有用:

paddingWidth

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

为您的扫雷艇编写快乐代码;)