2016-11-24 93 views
-4

我有一個功能「JOUER」的小問題。 我已經過了幾天的工作,但我看不到問題所在。 主要問題是:[錯誤]在'char'之前的'int'和[Error]預期的primary-expression之前預期的primary-expression。 下面是代碼:我在C++中的TicTacToe遊戲中的一個函數


#include <iostream> 
using namespace std; 
enum etat { victoire, continuer, null }; 
int qntMouv = 0; 
class TicTacToe { 
public: 
TicTacToe(); 
etat etatJeux(); 
void affichTab() const ;  
bool getXOMouv (char symbolMouv); 
bool mouvValid (int x, int y) const; 
void recommence(); 
void game(); 
void jouer(); 
private: 
char tableau[3][3];   
}; // fin classe TicTacToe 

TicTacToe::TicTacToe() 
{ 
for(int i = 0; i < 3; i++) 
for(int j = 0; j < 3; j++) 
tableau[i][j] = ' ';  
qntMouv = 0; // le tableau est vide   
} // fin constructeur TicTacToe 


bool TicTacToe::mouvValid (int x, int y) const{ 

    int lig, col; 

    if (lig >= 0 && lig <= 2 && col >=0 && col <= 2 && tableau[x] [y] == ' ') 
     return true; 

    else return false; 

} // fin du bool mouvValid 


    etat TicTacToe::etatJeux() { 

if ((tableau[0][0]) && (tableau[1][0]) && (tableau[2][0])) return victoire; //colomne 

else if ((tableau[0][1]) && (tableau[1][1]) && (tableau[2][1])) return victoire; //colomne 

     else if ((tableau[0][2]) && (tableau[1][2]) && (tableau[2][2])) return victoire; // colomne 

      else if((tableau[0][0]) && (tableau[0][1]) && (tableau[0][2]))return victoire; // lignme 

       else if ((tableau[1][0]) && (tableau[1][1]) && (tableau[1][2])) return victoire; // ligne 

         else if ((tableau[2][0]) && (tableau[2][1]) && (tableau[2][2])) return victoire; // ligne 

           else if ((tableau[0][0]) && (tableau[1][1]) && (tableau[2][2])) return victoire; // diago 

             else if ((tableau[0][2]) && (tableau[1][1]) && (tableau[2][0])) return victoire; // // diago 

              else if (qntMouv < 9) return continuer; 

               return null; 

} // fin etatJeux 

void TicTacToe::recommence() { 

qntMouv = 0; 

for(int i = 0; i < 3; i++) 

for(int j = 0; j < 3; j++) 

tableau[i][j] = ' '; 

} // fin recommence 
+0

什麼問題? – Rakete1111

+0

[錯誤]無法調用成員函數'void TicTacToe :: affichTab()const'without object – Sorel

+2

錯誤只是表示它說的是什麼。這裏'TicTacToe :: affichTab();'你正試圖調用沒有對象的函數。要麼使方法靜態或在對象上調用它 – user463035818

回答

-1

有代碼中的幾個問題。這看起來像是你第一次使用C++進行冒險。也許你應該閱讀關於該主題的一些tutorials。此外,當你嘗試寫一段代碼時,試着逐個寫一段代碼,檢查它是否按預期編譯/工作,然後繼續前進。 給你一些方向,我會嘗試列出代碼中的一些值得注意的問題:

  • 缺少括號(主要是}
  • 不能調用非靜態類成員無一物TicTacToe::affichTab() const - 只是可能你想叫affichTab()
  • jouer功能也許應該是TicTacToe類的membet方法,因爲它調用了很多會員的
  • 方法從jouer()稱爲不符合他們的定義,對於爲例E:
    • getXOMouv()稱爲VS getXOMouv (char symbolMouv)宣佈
    • mouvValid()稱爲VS mouvValid (int x, int y)宣告 - 我猜你想與xy參數
  • 表達if (joueur == 1) ? 'X' : 'O';是不正確的調用這個,你會想使用if或者三元運算符,並且可能將結果分配給某些變量,例如:

    const char var = (joueur == 1) ? 'X' : 'O';

  • if (etatJeux==victoire)應該是一個成員通話,讓你錯過了括號(etatJeux()

  • 裏面的jouer方法你有一個return 0說法是不正確的考慮方法聲明返回類型爲void

  • 在相同的方法int tableau[x][y];未使用。考慮到該方法應該是類成員變量隱藏相同名稱的類成員

+0

我正在處理所有這些的問題。當它完成並正常工作時,我會分享代碼 – Sorel

+0

這是什麼意思「還沒有工作」?仍然不編譯?什麼是錯誤? – Dusteh

+0

你是否已將定義更新爲'void TicTacToe :: jouer()?' – Dusteh