c中赋值错误的类型不兼容

时间:2014-11-16 21:19:57

标签: c struct typedef

我正在写一个游戏,目前正在进行撤消移动。这应该是非常简单但我得到这个错误,似乎无法弄明白。 这是我的功能...

bb_undo(BBoard board){
board->score = board->previousScore;
board->boardDim = board->previousBoard;
}

这是董事会结构......

struct bboard {
char boardDim[MAX_ROWS][MAX_COLS];
int score;
int rows;
int cols;
char previousBoard[MAX_ROWS][MAX_COLS];
int previousScore;
};

我还应该补充一点,bboard是一个指针。 有人有什么想法吗? 感谢。

2 个答案:

答案 0 :(得分:3)

数组没有赋值运算符。而不是这个陈述

board->boardDim = board->previousBoard;

您必须使用memcpy

复制数组

答案 1 :(得分:3)

无法将阵列分配给。

您需要使用memcpy,或者,因为结构可以分配给您,您可以定义

struct board 
{
    char cells[MAX_ROWS][MAX_COLS];
};

并更改bboard

struct bboard {
    board boardDim;
    int score;
    int rows;
    int cols;
    board previousBoard;
    int previousScore;
};

然后你可以写

bboard b;
b.previousBoard = b.boardDim;

但你需要

b.previousBoard.cells[x][y];

访问元素。

当然,您可以向board添加访问者功能以消除这种烦恼:

struct board 
{
    char  operator() (size_t r, size_t c) const { return cells[r][c]; }
    char& operator() (size_t r, size_t c)       { return cells[r][c]; }
    char cells[MAX_ROWS][MAX_COLS];
};

所以你可以写

char value = b.previousBoard(x, y);

b.previousBoard(x, y) = 'x';