对于学校作业,我们被指示成立TicTacToe委员会。我的程序目前有效,但是我遇到了一些问题,而且我不太确定它们为什么不正确:
class TicTacToe{
private:
char user_Turn[] = {'x','o'}; //Array to keep track of turn
当我尝试编译时,我收到错误并发出警告。警告是“非静态数据成员的类内初始化是C ++ 11扩展”。在课堂上初始化非静态数据成员是不好的做法吗?为什么呢?
错误是“无法从类内初始化程序中推导出数组绑定”。当我在阵列中放置一个'2'时,它会消失。那么类中的数组是否需要绑定?这是为什么?为什么不能通过初始化器推导出界限?
我的第二个问题是,同一个项目要求我们使用枚举对象在一个名为Board的单独类中声明赢家/输家/抽奖。枚举公开声明:
public:
enum Game {X_WON, O_WON, DRAW, UNFINISHED}; //enum declaration
我的TicTacToe类有一个Board对象作为名为board1的数据成员。如何使用我需要做的枚举:
Board::UNFINISHED
而不是
Board.UNFINISHED
此外,即使在我的Board实现文件中,我也需要对返回枚举变量的函数执行此操作:
Board::Game Board::gameState()
它在同一个类中,为什么游戏需要由'Board ::'继续进行。我想我很少理解enums与类一起工作。
谢谢!非常感谢任何回答。
答案 0 :(得分:1)
编辑:错过了有关错误的部分。看看@ Ari0nhh的答案
.
用于访问实例化类的成员。 enum
定义不被视为成员,它更像是静态常量,是类定义的一部分。所以你使用::
。
在class { ... }
块之外定义函数时,必须使用类名告诉编译器您正在为该类定义成员。如果您在class { ... }
块中定义它,则不需要。
e.g。
class Board
{
public:
enum Game {X_WON, O_WON, DRAW, UNFINISHED};
Game gameState()
{
//...
}
};
答案 1 :(得分:0)
错误是“无法从课堂中推断出数组绑定 初始化程序“。当我在数组中放入'2'时,它会消失。所以数组 在课堂上需要绑定?这是为什么?为什么不能限制 由初始化程序推断?
因为您可以覆盖类构造函数初始化列表中的数组数据。
public:
TicTacToe() : user_Turn( {'x','o','d', 'e'}) {};
因此您必须指定数组大小,或使用std::string
/ std::vector
。
我的TicTacToe类有一个Board对象作为数据成员调用 委员会1。如何使用我需要做的枚举: Board :: UNFINISHED而不是Board.UNFINISHED
因为UNFINISHED
枚举成员是在Board
类命名空间中声明的。这不是类成员,因此您无法使用.
运算符。
答案 2 :(得分:0)
对第一个问题的回答是,如果使用数组,则应在声明时给出数组的大小。如果您在声明时不确定数组大小,请使用List。 你可以参考这个来了解List如何在c ++中工作 http://www.cplusplus.com/reference/list/list/
您可以参考Declaring an enum within a class了解emuns澄清的使用方法。