【问题标题】:My getter and setter functions for Tic Tac Toe are not working我的井字游戏的 getter 和 setter 函数不起作用
【发布时间】:2016-06-02 04:48:48
【问题描述】:

您好,我正在学习 C++,我需要有关我的编程代码的帮助。我试图让类中的本地函数可以访问我的私有 char 变量,以便我可以在 Int main() 中显示它。每次我运行编译器时,它都会给我一个错误(“无效类型'char [int]'用于数组下标”)。另外,如果有人知道如何在类中传递变量,以便我可以让板子显示用户移动;那将不胜感激。 P.S 我知道 done = 0。那只是为了我测试板输出。

#include <iostream>
#include <string>
using namespace std;
class CheckerBoard{
public:

    void initBoard()
    {

        for(int y=0; y<3; y++)
        {
            for(int x=0; x<6; x++)
            {
                if((x%2)==0)
                {
                    _board[y][x]='-';
                }
                else
                {
                    _board[y][x]= '|';
            }}
        }

    }
    void printBoard(){
        for(int y=0; y<3; y++)
        {
            for(int x=0; x<6; x++)
            {
                cout<< _board[y][x];
            } cout<<endl;
        }
    }
    void setBoard(char board){
        _board[3][6]=board;}
    char getBoard(){
        return _board[3][6];
    }

private:

    char _board[3][6];
};
int main()
{int done=1;
int x;
int y;

while(done==0){
    char player1Symbol;
    char player2Symbol;
    string player1Name;
    string player2Name;
    cout << "Welcome to Tic Tac Toe Lite" << endl;
    cout<<"What is your Name player one?"<<endl;
    cin>>player1Name;
    cout<<"What symbol would you like?"<<endl;
    cin>>player1Symbol;
    cout<<"What is your name player two?"<<endl;
    cin>>player2Name;
    cout<<"What symbol would you like?"<<endl;
    cin>>player2Symbol;
    cout<<"Ok player one pick an X coordinate";
    cin>>x;
    cout<<"Now pick an Y coordinate";
    cin>>y;
    if(x>0&&y>0){
        board[y][x]=player1Symbol;
      }
    CheckerBoard checkerBoard;
    checkerBoard.initBoard();
    checkerBoard.printBoard();
    }
}
    CheckerBoard checkerBoard;
    checkerBoard.initBoard();
    checkerBoard.printBoard();
    return 0;
}

【问题讨论】:

  • 您需要在setBoard 中执行与initBoard 相同的两个循环。想想_board[3][6]=board; 是什么意思。并将char 的数组与char 区分开来。
  • 这里有很多错误。我最好的建议是把你的程序写成小块,并在你去的时候编译它。当您尝试一次编写所有代码并在最后编译它时,会出现很多错误,您将永远找不到简单的方法来修复它。
  • @LogicStuff 很抱歉,但我可以问一下,区分 char 数组和 char 数组是什么意思?你想让我把 void Initboard 放在 setBoard 里面吗?抱歉,我才 15 岁,还在努力理解?
  • 编译至少从底部删除第6行中的}并在if(x&gt;0&amp;&amp;y&gt;0){行之前添加char board[3][6];。通过这些更改,我成功地用 gcc 编译。但是程序仍然无法运行,这段代码中有很多错误
  • @jjstarz char board 表示一个charchar board[3][6] 表示char 数组的数组,但仅在声明中。后来board[3][6] 表示在[3;6] 处给我char

标签: c++ class multidimensional-array parameters char


【解决方案1】:

首先,您想要 3x3 板还是 6x3 板?您创建了一个 6x3 板,然后在其中存储了网格线。我猜你想要一个 3x3 网格线可能应该由打印功能绘制,但不是数据的一部分。比如:

void printBoard(){
    for(int y=0; y<3; y++)
    {
        for(int x=0; x<3; x++)
        {
            cout << _board[y][x];
            if( x < 2 )
                cout << '|';
        }
        cout << '-----' << endl;
    }
}

对于setBoard,您希望参数为“char[][3] board”,意思是“一个 3 宽字符数组的数组”,然后使用 for 循环复制一个个字符。

对于 getBoard,我希望它以一行和一列作为参数并只返回一个值,这意味着更好的名称是 getCellgetValue .

在 C++ 中处理数组时,请记住数组值实际上是指向数组中第一项的常量指针。所以尝试“array1 = array2”会失败,因为该指针无法重新分配。

数组声明后,方括号用于索引数组,所以 board[3][6] 尝试从第四*行返回第七个*项,但只有三行六项,因此您将从数组外部获取无意义的数据(除非您的编译器进行了一些大多数人不做的额外检查)。

*C++ 使用零索引,因此 board[0][1] 指的是第一行中的第二项。

【讨论】:

  • 你能帮我解释一下返回 getBoard 的值是什么意思吗?
  • 而不是返回整个板子,像这样:"char* getBoard() {return (char*)board;}" (必须是char*,因为函数不能返回数组类型。)我一次只返回一个单元格,如下所示:“char getCell(int x, int y) {return board[y][x];}”
猜你喜欢
  • 2018-10-10
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多