C++ 表达式必须具有类类型&;';的左侧;。x';必须具有类/结构/联合

C++ 表达式必须具有类类型&;';的左侧;。x';必须具有类/结构/联合,c++,C++,我得到了标题中显示的错误。我确信这只是一个简单的错误,但我还没弄清楚。代码很简单,因为我刚开始用C++。我想做一个井字游戏,但这个错误阻碍了我。欢迎任何建议!:) main.cpp: #include <iostream> #include "Game.h" using namespace std; int main() { char board[3][3] = { {' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '} }; cou

我得到了标题中显示的错误。我确信这只是一个简单的错误,但我还没弄清楚。代码很简单,因为我刚开始用C++。我想做一个井字游戏,但这个错误阻碍了我。欢迎任何建议!:)

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.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;
}
#包括
#包括“Game.h”
使用名称空间std;
Game::Game(char a[3][3])
{
_董事会[3][3]=a[3][3];
}
void Game::printBoard()
{

你的代码中有几个错误

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

\u board[3][3]=a[3][3];
也是错误的。它将编译,但在运行时无法工作。它只复制1个
字符
而不是整个数组,并且数组是0索引的,因此
[3]
是不受限制的。您需要遍历数组的每个维度,复制每个
字符

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

请尝试类似以下内容:

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

#包括
#包括“Game.h”
使用名称空间std;
游戏:游戏(棋盘和a){
对于(int行=0;行<3;++行){
用于(整数列=0;列<3;++列){
_板[行][col]=一[行][col];
}
}
} 
void Game::printBoard(){
对于(int行=0;行<3;++行){
用于(整数列=0;列<3;++列){

cout
game001游戏(charboard[3][3]);
声明一个函数!一个函数,它接受一个由三个字符组成的三个数组组成的数组,并返回一个
游戏
对象。几乎可以肯定的是,将错误的文件内容粘贴到了您标记为Game.hIt的内容中。在我看来,这是您需要的。一些程序员伙计,那么我该如何调用构造函数?通过传递
board
,“learning”顺便说一句,猜测很可怕,你应该听一些程序员的话。所以我需要将字符板[3][3]和字符板[3][3]更改为字符板和字符板[3][3],并通过引用传递字符板?@RioT1133你不必这样做,但这让事情变得更容易一个问题,typedef字符板[3][3]是什么;do?和是否通过引用传递是必需的?@RioT1133
typedef
char[3][3]创建别名
Board
type,您正在多段代码中使用它。typedef减少了重复,使代码更易于阅读和理解。至于参考,它不是严格需要的,但它有助于避免在调用构造函数时生成阵列数据的冗余副本。我现在明白了,感谢您对我的耐心。
#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;
}