Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C++; >我试图在C++中做一个非常基本的TigToToT,而在我没有明显语法错误的时候,我有很多调试错误:“Cobra.exe 0x0100142D中未处理的异常:0xC000 00 5:访问违例读取位置0xccccc359”< /p>_C++ - Fatal编程技术网

使用C++; >我试图在C++中做一个非常基本的TigToToT,而在我没有明显语法错误的时候,我有很多调试错误:“Cobra.exe 0x0100142D中未处理的异常:0xC000 00 5:访问违例读取位置0xccccc359”< /p>

使用C++; >我试图在C++中做一个非常基本的TigToToT,而在我没有明显语法错误的时候,我有很多调试错误:“Cobra.exe 0x0100142D中未处理的异常:0xC000 00 5:访问违例读取位置0xccccc359”< /p>,c++,C++,我觉得这是一个明显的错误,我只是没有处理,但它;It’我的神经肯定开始紧张起来了。我将标记访问错误的位置。。。现在它,;在我的checkwin方法中有一个,但我觉得肯定不止一个 在我的标题中,我使用一个私有字符**板和一个私有整数播放器 #include "TicTacToe.h" #include <iostream> using namespace std; int main() { int rowChosen, colChosen; TicT

我觉得这是一个明显的错误,我只是没有处理,但它;It’我的神经肯定开始紧张起来了。我将标记访问错误的位置。。。现在它,;在我的checkwin方法中有一个,但我觉得肯定不止一个

在我的标题中,我使用一个私有字符**板和一个私有整数播放器

#include "TicTacToe.h"
#include <iostream>
using namespace std;

int main()
{
    int rowChosen,
        colChosen;

    TicTacToe newGame;

    while(newGame.checkWin()==' ' && !newGame.fullBoard())
    {
        newGame.displayBoard();
        do
        {
            cout << "Player " << newGame.getPlayer() << " choose a row and column.";
            cin >> rowChosen >> colChosen;

            newGame.setGame(rowChosen,colChosen);

        }while(newGame.setGame(rowChosen,colChosen)==false);

        newGame.makeMove(rowChosen, colChosen, newGame.getPlayer());
        newGame.switchPlayer();
    }

    newGame.displayBoard();
    if(newGame.checkWin()!=' ')
        cout << "Player " << newGame.returnWinner() << " wins!";
    else if(newGame.fullBoard()==true)
        cout << "Cat's Game: This is a Draw!";

    return 0;
}

TicTacToe::TicTacToe()
{
    player = 1;

    char blank = ' ';                       
    for(int row=0;row<3;row++)              
        for(int col=0;col<3;col++)
            board[row][col] = ' ';
}

void TicTacToe::setPlayer(int play)
{
    player = play;
}


int TicTacToe::getPlayer()
{
    return player;
}

void TicTacToe::switchPlayer()
{
    if (player==1)
        player++;
    else
        player--;
}

bool TicTacToe::setGame(int row, int col)       //input validation
{
    if (row >= 3 || row < 0) 
        return false;
    if (col >= 3 || col < 0) 
        return false; 
    if (board[row][col] != ' ')
        return false;

    return true;
}

char TicTacToe::getBoard(int row, int col)
{
    return board[row][col];
}

bool TicTacToe::fullBoard()
{
    bool full = true;

    for(int row=0;row<3;row++)  
        for(int col=0;col<3;col++)
        {
            if(board[row][col]==' ')
            {
                full=false;
                break;
            }       
        }
    return full;    
}

void TicTacToe::makeMove(int r, int c, int player)
{
    char ch;
    if (player==1)
        ch = 'X';
    else
        ch = 'O';
    board[r][c] = ch;
}

char TicTacToe::checkWin()
{
    char b = ' ';
    for(int i=0; i<3; i++) //horizontal
    {
        if((board[i][1]==board[i][0]) && (board[i][1]==board[i][2])) //THIS IS ERROR
        {
            b=board[i][1];
        }
    }
    for(int j=0; j<3; j++) //vertical
    {
        if( (board[1][j]==board[0][j]) && (board[1][j]==board[2][j]) ) 
            b=board[1][j];
    }
    if((board[0][0]==board[1][1] && board[1][1]==board[2][2]) ||
       (board[2][0]==board[1][1] && board[1][1]==board[0][2]))
        b= board[1][1];
    return b;   
}

void TicTacToe::displayBoard()
{
    for(int row=0;row<3;row++)
    {
        cout << "|-----|";
        for(int col=0;col<3;col++)
        {
            if(board[row][col]==' ')
                cout << "| ";
            else
                cout << "|" << board [row][col];
        }
        cout << "|" << endl;
        cout << "|-----|";

    }
}

int TicTacToe::returnWinner()
{
    int winner = 0;
    if(checkWin()=='X')
        winner = 1;
    else if(checkWin()=='O')
        winner = 2;
    return winner;
}

假设您已经包含了所有代码,那么您缺少了一些基本的东西:类TictaToe的声明。当然,有一个
TicTacToe.h
,所以它可能(可能)藏在那里。那会有帮助的

总而言之,我认为Mat是对的——您在ctor中声明一个名为
的本地board
,并初始化它。但一旦ctor完成,这就超出了范围,这意味着所有初始化都会消失在以太中。。假设您在类中定义了
board
,那么只需删除
char
声明就可以了


现在,这里有一个一般性的建议:如果您得到一个访问冲突异常,通常意味着您在所指内容的范围上犯了错误。由于异常发生在您正在使用
board
的某个点上,因此包含已识别
board
的程序的名称就是要查看的地方。

TicTacToe::TicTacToe(){char board[3][3]
几乎肯定是一个bug,为什么您希望在构造函数中有一个名为
board
的本地代码?请正确缩进您的代码,并在缩小问题范围后显示类声明-可能80%以上的代码与您发布的代码无关。包括
TicTacToe
的类声明“在我的标题中,我使用了一个私有
char**
..”——这几乎肯定是您的第一个错误,因为您的构造函数中没有为该构造分配必要的内存(您无论如何都不应该使用它,因为您已经知道它是一个3x3板)。你在构造函数中初始化一个本地自动变量
board
,它实际上什么都不做,因为一旦构造函数完成,它就会丢失。我看到了,第一次挥杆时,我在构造函数中制作了一个board,并出于任何原因调用了一个函数,当我更改它时,我没有删除该片段。我很抱歉现在,当我试图用空的“”字符填充构造函数时,构造函数本身出现了错误…因此,请包含实际的.h文件并让我们查看代码。感谢大家的帮助,这确实是一个很容易解决的问题,现在,很容易处理的只是小的显示/逻辑错误。你是对的,我看到了问题。我想我已经解决了在构造函数中为board分配空间,但我刚刚制作了一个新的board,在这种情况下,私有board仍然只是一个空的空间,甚至没有空的数组空间。这很容易犯错误,特别是当您不区分成员变量和局部变量时。通常的做法是在成员变量前面加上“m”_java java和C++的调整很难,当我的大学使用了这么多的Java,而不是很多C++,我认为java的动态分配是很令人沮丧的,所以我真的不知道如何使用它。
class TicTacToe
{
 private:
    char board[3][3];     //there we go
    int player;

 public:
    TicTacToe();
    void setPlayer(int);
    int getPlayer();
    void switchPlayer();
    bool setGame(int,int);
char getBoard(int,int);
    bool fullBoard();
    void makeMove(int,int,int);
    char checkWin();
    void displayBoard();
    int returnWinner();
};