我正在开展拼字游戏项目。在项目中,我有一个瓷砖类,它包含字母分数和游戏中瓷砖数量的int值。这是_tile类。
我的代码中的另一个类是tile_pool类。它应该有26个字母和空白图块的27个图块类。不幸的是,当我编译我的代码时,我总是得到“错误:数字常量之前的预期标识符”。
class Tile {
int count;
int score;
public:
_tile(int , int );
};
_tile::_tile(int _count = 0, int _score = 0): count(_count) , score(_score) {
}
class Pool{
Tile A(9,1);
... (the rest of the letters)
};
我环顾四周,发现Initialize a class object inside the other class constructor 所以我尝试为_tile对象创建一个默认构造函数,但这并没有改变错误。我还发现,当我走第14行并把它放在我的主函数中时,没有问题。我还尝试首先初始化Tile,然后使用set_values函数来设置tile的计数和分数,但这也不起作用。
void set_values(int _count, int _score) {
count = _count;
score = _score;
}
在tile_pool函数中:
Tile A;
A.set_values(9,1);
返回“错误:'A'未命名类型”
我不明白为什么我不能在我的tile_pool类中初始化Tile,但我可以在我的主要版本中。任何帮助表示赞赏!感谢。
编辑:谢谢你的回答!我编辑了代码以更好地遵循指南,并改变了我按照建议声明我的类的方式。我还将解决方案改为:
class Pool {
Tile a = Tile(9,1);
};
答案 0 :(得分:2)
您可以使用member initializer list:
class Pool {
Tile A;
public:
Pool() : A(9, 1) {}
};
答案 1 :(得分:1)
正确的语法是:
Tile A = Tile(9,1);
或
Tile A{9, 1};
您可能希望这些是static const
,因为您只需要一个主要磁贴用于该类的所有实例。 (事实上,这完全是一个糟糕的设计,但你会在一段时间后自己解决这个问题。)
BTW typedef class...
风格很差,你应该写class Tile
(或者你想叫你的班级)。同一个班级不需要2个名字。此外,在类名中使用前导下划线(_tile
)是非常规的。