为了账号安全,请及时绑定邮箱和手机立即绑定

Visual Studio 2015“非标准语法;使用“&”创建指向成员的指针”

Visual Studio 2015“非标准语法;使用“&”创建指向成员的指针”

C++
慕田峪9158850 2019-11-04 10:59:48
我正在学习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。


查看完整回答
反对 回复 2019-11-04
?
撒科打诨

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"


查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 828 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信