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

问题描述 投票:0回答:1

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

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;

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

c++ struct enums
1个回答
1
投票

我正在查看您的代码的问题是您正在尝试访问未实例化的值。我的意思是,当你尝试为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中提取该功能。

快乐编码你的扫雷;)

© www.soinside.com 2019 - 2024. All rights reserved.