初始化变量时出错

时间:2014-08-30 07:40:31

标签: c++

我对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;
};

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

3 个答案:

答案 0 :(得分:1)

应在构造函数

的定义中在构造函数中初始化实例成员字段
manager::manager() 
  : _randomGenerator(time(0)), _diceRoll(0.0f, 1.0f), endGame(false) 
  {}

这将放在您的manager.cc实施文件中,而不是manager.h头文件中。

答案 1 :(得分: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));只能用于static / const变量。

答案 2 :(得分:0)

如果您使用的是C ++ 11,请执行

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

当您编写default_random_engine _randomGenerator(***);时,编译器正在考虑您定义一个名为randomGenerator的函数,该函数返回default_random_engine,并在time(0)处等待类型