2017-03-10 74 views
-2

對於一個學校任務,我們被指示製作一個TicTacToe委員會。我的程序當前工作,但這裏是我遇到了一些問題,我也不太清楚他們爲什麼不正確:初學者C++問題(學校項目調試問題)

class TicTacToe{ 

private: 


    char user_Turn[] = {'x','o'}; //Array to keep track of turn 

當我試着和我得到一個錯誤和警告編譯。警告是「非靜態數據成員的類內初始化是C++ 11擴展」。在課堂上初始化非靜態數據成員是不好的做法嗎?爲什麼?

錯誤是「數組邊界不能從在級初始化器推導」。當我在陣列中放置一個'2'時,它就會消失。所以類中的數組需要被綁定?這是爲什麼?爲什麼不能通過初始化器推導出界限?

我的第二個問題是,在同一個項目需要我們用一個枚舉對象來聲明一個勝利者/失敗者/名爲董事會單獨的類畫。枚舉是公開宣稱:

public: 
    enum Game {X_WON, O_WON, DRAW, UNFINISHED}; //enum declaration 

和我的井字遊戲類有一個董事會對象稱爲委員會1的數據成員。爲什麼使用枚舉我需要做的:

Board::UNFINISHED 

,而不是

Board.UNFINISHED 

此外,即使在我局實施的文件,我需要做的這是返回一個枚舉變量的函數:

Board::Game Board::gameState() 

它在同一個班級,所以爲什麼遊戲需要由'Board ::'進行。我想我很少理解枚舉與類的關係。

謝謝!非常感謝誰回答。

+1

這是一個問題和答案網站。問題是單數,而不是複數。其中兩個問題甚至不是關於你發佈的三行(不完整)代碼。您可能想要查看[問]。 (編譯器錯誤不是*調試*,以供將來參考。調試是找出爲什麼你正在執行的代碼不能按預期工作,並且你不能執行無法編譯的代碼。) –

+0

我定義了Questio ** N **和答案,而不是問題** S **和答案。顯然你很難區分單數(** ONE **)和多個(** MORE THAN ONE **)之間的差異。在獲得有關正確使用本網站的信息時,您應該花時間代替[參觀]並閱讀[幫助]頁面以瞭解該網站的工作方式,而不是嗤之以鼻。他們不是連接的問題;他們是關於同一代碼中兩個單獨問題的三個問題,其中大部分甚至未包含在問題中。是的,**單數**實際上意味着**一個**。去谷歌上查詢。 –

回答

1
  1. 你或許可以忽略警告,但可能要檢查你是在編譯C++ 11或C++ 14

編輯您的編譯器設置:錯過了有關該錯誤的部分。看看@Ari0nhh答案

  1. .用於訪問實例化類的成員。 enum定義不被認爲是一個成員,它更像是一個靜態常量,是類定義的一部分。所以你使用::

  2. 當您在class { ... }塊之外定義函數時,必須使用類名告訴編譯器您正在爲該類定義成員。如果您在class { ... }區塊內定義它,則不需要。

例如,

class Board 
{ 
public: 
    enum Game {X_WON, O_WON, DRAW, UNFINISHED}; 

    Game gameState() 
    { 
     //... 
    } 
}; 
+0

謝謝!說得通。所以出於同樣的原因,函數名稱前面有ClassName ::,如果返回類型是在類函數中定義的,那麼返回類型也應該如此。這是正確的嗎?再次感謝! – maylay97

+0

是的。在'class'塊內,每個類的成員和類型都在範圍內,這意味着你可以直接引用它。在類塊之外,你必須使用'ClassName ::'。 – smead

0

錯誤是「數組邊界不能從在級 初始化推導」。當我在陣列中放置一個'2'時,它就會消失。那麼在類中需要綁定數組 ?這是爲什麼?爲什麼不能通過初始值設定項推導出界限 ?

因爲您可以重寫類構造函數初始值設定項列表中的數組數據。

public: 
TicTacToe() : user_Turn({'x','o','d', 'e'}) {}; 

所以,你必須指定數組的大小,或使用std::string/std::vector

和我的TicTacToe類有一個Board對象作爲數據成員,名爲 board1。爲什麼使用枚舉我需要做的: 局:: UNFINISHED和

因爲UNFINISHED枚舉成員在Board類命名空間中聲明不Board.UNFINISHED。這不是班級成員,因此您不能使用.運營商。

+0

嗯。在用戶定義的構造函數中如何初始化數組的一個反參數以從定義點的初始化程序列表中的初始值設定項的數目來推斷數組的大小?請注意,當數組大小爲2時,無論如何確定,您的示例都不會編譯。 –

0

第一個問題的答案是,如果您使用的是數組,則應在聲明時給出數組的大小。如果您在聲明時不確定數組大小,請使用List。 你可以參考這個就知道名單是如何工作的C++ http://www.cplusplus.com/reference/list/list/

可以參考Declaring an enum within a class爲emuns澄清的使用。

+0

這與獨立數組的定義不同,後者的大小可以從初始值設定項中推斷出來,我沒有看到差異的直接原因。你做? –

+0

是的,我同意,差異沒有邏輯。但是因爲它是一個類的成員,而且我們無論如何都知道數組的大小,所以最好提及數組大小,就像在C++中一樣,內存管理留給我們。 – Chandini