表达式必须具有类类型& '。x'左边必须有class / struct / union

时间:2017-11-11 17:05:11

标签: c++

我收到了标题中显示的错误。我确定这只是一个简单的错误,但我还没弄明白。代码很简单,因为我刚开始使用C ++。我正在尝试制作一个Tic tac toe游戏,但错误阻碍了我。欢迎任何建议! :)

main.cpp中:

#include <iostream>
#include "Game.h"

using namespace std;

int main()
{
char board[3][3] = { {' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '} };

cout << "*** Tic tac toe ***" << endl;

Game game001(char board[3][3]);

game001.printBoard();
}

Game.h

#pragma once
class Game
{
public:
Game(char a [3][3]);

void printBoard();

private:
char _board[3][3];
};

Game.cpp:

#include<iostream>
#include "Game.h"

 using namespace std;

Game::Game(char a [3][3])
{
_board[3][3] = a[3][3];
}

void Game::printBoard()
{
cout << _board[0][0] << endl;
}

1 个答案:

答案 0 :(得分:1)

您的代码中存在多个错误。

Game game001(char board[3][3]);声明一个函数,而不是实例化一个对象。正确的语法是Game game001(board);

_board[3][3] = a[3][3];也是错误的。它将编译,但它不会在运行时工作。它只复制1 char而不是整个数组,并且数组为0索引,因此[3]超出范围。您需要遍历复制每个char的数组的每个维度。

printBoard()相同,只输出1 char而不是整个数组。

尝试更像这样的东西:

#pragma once
typedef char Board[3][3];
class Game {
public:
    Game(Board &a);
    void printBoard();
private:
    Board _board;
};

#include <iostream>
#include "Game.h"

using namespace std;

Game::Game(Board &a) {
    for(int row = 0; row < 3; ++row) {
        for(int col = 0; col < 3; ++col) {
            _board[row][col] = a[row][col];
        }
    }
} 

void Game::printBoard() {
    for(int row = 0; row < 3; ++row) {
        for(int col = 0; col < 3; ++col) {
            cout << _board[row][col] << ' ';
        }
        cout << endl;
    }
}

#include <iostream>
#include "Game.h"

using namespace std;

int main() {
    Board board = { {' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '} };
    cout << "*** Tic tac toe ***" << endl;
    Game game001(board);
    game001.printBoard();
    return 0;
}