初学者C ++问题(学校项目调试问题)

时间:2017-03-10 03:25:08

标签: c++ c++11 enums

对于学校作业,我们被指示成立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与类一起工作。

谢谢!非常感谢任何回答。

3 个答案:

答案 0 :(得分:1)

  1. 您可以忽略该警告,但可能需要检查您在C ++ 11或C ++ 14中编译的编译器设置
  2. 编辑:错过了有关错误的部分。看看@ Ari0nhh的答案

    1. .用于访问实例化类的成员。 enum定义不被视为成员,它更像是静态常量,是类定义的一部分。所以你使用::

    2. class { ... }块之外定义函数时,必须使用类名告诉编译器您正在为该类定义成员。如果您在class { ... }块中定义它,则不需要。

    3. 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澄清的使用方法。