[英]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类型中),因此在引用符号值时不会出错。 这是不同的成mines
, paddingHeight
和paddingWidth
。 下面的代码为我工作:
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.