我正在学习C ++,并尝试制作一个Tic Tac Toe的小游戏。但是我继续得到非标准语法C3867。使用“&”创建要记住的指针。这是我的TicTacToe.h:#pragma once#include <iostream>using namespace std;class TicTacToe{public: TicTacToe(); string getName1(); string getName2(); void printBoard(); void clearBoard(); void setName1(string player1Name); void setName2(string player2Name); void setSign1(string player1Sign); void setSign2(string player2Sign, string player1Sign); void playGame(string player1Name, string player2Name,string player1Sign,string player2Sign); void player1Move(string coordX); void player1Turn(); void player2Turn();private: char Board[3][3]; string _player1Name; string _player2Name; string _player1Sign; string _player2Sign; string _coordX; string _coordY;};这是我的TicTacToe.cpp:#include "TicTacToe.h"#include <iostream>#include <string>TicTacToe::TicTacToe() {}void TicTacToe::playGame(string player1Name, string player2Name, string player1Sign, string player2Sign) { TicTacToe Board; Board.setName1(player1Name); Board.setSign1(player1Sign); Board.setName2(player2Name); Board.setSign2(player1Sign, player2Sign); Board.clearBoard(); Board.printBoard();}void TicTacToe::printBoard() { cout << " |1|2|3|\n"; for (int i = 0; i < 3; i++) { cout << "--------\n"; cout << i + 1 << "|" << Board[i][0] << "|" << Board[i][1] << "|" << Board[i][2] << "|" << endl; }}void TicTacToe::clearBoard() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { Board[i][j] = ' '; } }}void TicTacToe::setName1(string player1Name) { cout << "Enter your name, player 1: \n"; cin >> player1Name; _player1Name = player1Name;}void TicTacToe::setName2(string player2Name) { cout << "Enter your name, player 2: \n"; cin >> player2Name; _player2Name = player2Name;}string TicTacToe::getName1() { return _player1Name; }string TicTacToe::getName2() { return _player2Name; }我已经尝试了其他所有有关此错误的问题,但它们没有起作用。您如何解决此错误?
3 回答
皈依舞
TA贡献1851条经验 获得超3个赞
问题在于包含以下内容的行(它在您的代码中出现两次):
Board.player1Move;
播放器的一招是一个函数,该函数接收std :: string参数作为输入。为了调用它,您需要创建一个std :: string对象并将其作为函数的参数传递。如果希望将字符串作为输入给出,则可以使用以下语法:
std::string move;
cin >> move;
Board.player1Move(move);
另外,请注意,player2Turn应该调用Board.player2Move而不是Board.player1Move。
撒科打诨
TA贡献1934条经验 获得超2个赞
drorco的答案中已经提供了解决问题的方法。我将尝试解释错误消息。
当您具有非成员函数时,可以在表达式中使用函数名称,而无需使用函数调用语法。
void foo()
{
}
foo; // Evaluates to a function pointer.
但是,当您具有成员函数时,在没有函数调用语法的表达式中使用成员函数名称无效。
struct Bar
{
void baz() {}
};
Bar::baz; // Not valid.
要获得指向成员函数的指针,您需要使用&运算符。
&Bar::baz; // Valid
这解释了Visual Studio的错误消息:
"non-standard syntax; use '&' to create a pointer to member"
- 3 回答
- 0 关注
- 828 浏览
添加回答
举报
0/150
提交
取消