【问题标题】:One of my functions on the TicTacToe game in C++我在 C++ 中的井字游戏中的一项功能
【发布时间】:2016-11-24 19:16:58
【问题描述】:

我对函数“JOUER”有一点问题。 这几天我正在研究它,但我看不到问题。 主要问题是:[Error] 'int' 之前的预期主表达式和 [Error] 'char' 之前的预期主表达式。 代码如下:


#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

【问题讨论】:

  • 有什么问题?
  • [错误] 不能在没有对象的情况下调用成员函数 'void TicTacToe::affichTab() const'
  • 错误只是它所说的。这里TicTacToe::affichTab(); 你试图在没有对象的情况下调用函数。将方法设为静态或在对象上调用它
  • 那里有很多格式问题,括号不加起来,TicTacToe::affichTab(); 是最少的问题

标签: c++ tic-tac-toe


【解决方案1】:

您的代码中存在一些问题。这看起来像是您第一次使用 C++ 进行的冒险。也许您应该阅读一些有关该主题的tutorials。此外,当您尝试编写一些代码时,请尝试逐部分编写,检查它是否按预期编译/工作,然后继续前进。 为了给您一些指导,我将尝试在您的代码中列出一些值得注意的问题:

  • 缺少括号(主要是}
  • 无法调用没有对象TicTacToe::affichTab() const 的非静态类成员 - 可能您只是想调用affichTab()
  • jouer 函数应该是 TicTacToe 类的 membet 方法,因为它调用了它的很多成员
  • jouer() 调用的方法与它们的定义不匹配,例如:
    • 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]; 未使用。考虑到方法应该是类成员,变量隐藏了同名的类成员

【讨论】:

  • 我正在处理所有这些问题。我会在代码完成并正常工作后分享代码
  • “尚未工作”是什么意思?还是不编译?什么错误?
  • 您是否已将定义更新为 'void TicTacToe::jouer ()?'
  • 是的。我想它快到了。它还没有编译,因为:[Error] expected primary-expression before 'int' and [Error] expected primary-expression before 'char'
  • 如果您复制/粘贴更新后的代码,则为:41、42、46、50
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多