2014-08-30 83 views
-1

我对C++相当陌生。 和我正在做一个tic tac toe游戏,我需要一个随机生成器来决定哪个玩家先行。 但我初始化变量时出错。初始化变量时出错

下面是代码

#pragma once 
#include <string> 
#include <random> 
#include <ctime> 
#include "Board.h" 
#include "Player.h" 

class manager 
{ 
public: 
    manager(); 
    void gameEntrance(); 
    void playGame(); 
    void askMove(); 
    void diceRoll(); 
    void winChekcer(); 
    void endGameChecker(); 

private: 
    default_random_engine _randomGenerator(time(0)); //here i got "Error: functio "time" is not a type name 
    uniform_real_distribution<float> _diceRoll(0.0f, 1.0f); //here i got "Error: expected a type specifier 
    bool _endGame = false; 
    string _turn; 
    Board _board; 
    Player _player1; 
    Player _player2; 
}; 

所以我做了什么错。请赐教。感谢你们。

回答

1

实例成员字段应该在构造函数在这个构造

manager::manager() 
    : _randomGenerator(time(0)), _diceRoll(0.0f, 1.0f), endGame(false) 
    {} 

的定义来初始化这个会去你的manager.cc实现文件,而不是在你的manager.h头文件。

+1

的地方并把它们放在声明的顺序 – 2014-08-30 07:56:23

+0

非常感谢你。它帮助到我。 好的时候去下一个错误。 – GroniumArgor 2014-08-30 07:59:09

1

要么使用构造函数初始化变量:

manager::manager() 
: _randomGenerator(time(0)), _diceRoll(0.0f, 1.0f) 
{} 

=与全面建设与初始化列表

default_random_engine _randomGenerator = default_random_engine(time(0)); 
uniform_real_distribution<float> _diceRoll = uniform_real_distribution<float>(0.0f, 1.0f); 

=

default_random_engine _randomGenerator = { time(0) }; 
uniform_real_distribution<float> _diceRoll = { 0.0f, 1.0f }; 

最后一个是未经测试, = time(0)也可以工作,可能取决于可能的转换运算符

您的直接构造函数调用default_random_engine _randomGenerator(time(0));只能用于静态/常量变量。

0

如果你在C++ 11,做

uniform_real_distribution<float> _diceRoll{0.0f, 1.0f};

而且当你写default_random_engine _randomGenerator(***);编译器正在考虑你是定义其名称为randomGenerator返回default_random_engine的功能,并在等待类型time(0)