表达式必须具有类类型,'.x'左侧必须具有类/结构/联合

expression must have a class type & left of '.x' must have class/struct/union

本文关键字:类型 结构 联合 表达式      更新时间:2023-10-16

我得到了标题中显示的错误。我确信这只是一个简单的错误,但我还没有弄清楚。代码之所以如此简单,是因为我刚开始使用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.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;
}

您的代码中有几个错误。

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;
}