2014-08-30 76 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)