这似乎是一个简单的问题,一个简单的解决方案,但它一直是我的问题。我正在谈论的是这段代码:
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;
我想要实现的目标非常明显。我尝试了很多使用“。”的组合。和“::”运算符在不同的地方或使它们静止,但我仍然无法正确。我得到“'难度'不是一个类或命名空间”错误或“在'之前预期的主要表达式'。”令牌”。请帮忙。谢谢!
答案 0 :(得分:1)
我在查看代码时遇到的问题是您正在尝试访问未实例化的值。我的意思是,当您尝试为summarise_all(funs(sum(. > 1)))
属性赋值时,您正在引用声明,但不是实例化的值,因为没有实例化任何内容。
当您声明某些内容时,您正在解释如何在不指定任何值或行为的情况下构建内存。
枚举正在工作,因为符号名称被映射到一个值(旧的时候它被直接映射到一个int类型),所以当你引用符号值时你不会得到错误。这与mines
,mines
和paddingHeight
不同。下面的代码对我有用:
paddingWidth
顺便说一句,从SOLID原则的角度来看,设计可能并不是最好的。您正在使用MainWindow混合处理属性。也许最好从MainWindow中提取该功能。
为您的扫雷艇编写快乐代码;)