我可以在另一个类中初始化一个类吗?

时间:2016-03-15 02:49:33

标签: c++ class

我正在开展拼字游戏项目。在项目中,我有一个瓷砖类,它包含字母分数和游戏中瓷砖数量的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);
};

2 个答案:

答案 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)是非常规的。