2016-03-15 216 views
2

我正在拼字游戏项目。在这个项目中,我有一个瓦片类,它包含一个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功能:

返回的 “错误: 'A' 没有指定类型”

我不明白为什么我不能初始化在我的tile_pool类中有一个Tile,但我可以在我的主类中。任何帮助表示赞赏!谢谢。

编辑:谢谢你的答案!我编辑了代码以更好地遵循指导原则,并改变了我按照建议声明我的课程的方式。我也改变了我的解决方案:

class Pool { 
    Tile a = Tile(9,1); 
}; 
+0

请发表[MCVE。没有行号。 'typedef class _tile {...} Tile;'是一个C-ism,在C++中我们编写'class Tile {...};'。 – Barry

回答

1

正确的语法是:

Tile A = Tile(9,1); 

Tile A{9, 1}; 

你可能想这是static const因为你只需要为所有的一个主瓷片类的实例。 (事实上​​这完全是一个糟糕的设计,但过一段时间后你会为自己弄清楚)。


BTW typedef class...是作风不好,你应该只写class Tile(或任何你想打电话给你的类)。没有必要为同一个班级设置两个名字。另外,在类名中使用前导下划线(_tile)是非常规的。

相关问题