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

我正在学习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; }


我已经尝试了其他所有有关此错误的问题,但它们没有起作用。您如何解决此错误?



慕田峪9158850
浏览 829回答 3
3回答

皈依舞

问题在于包含以下内容的行(它在您的代码中出现两次):Board.player1Move;播放器的一招是一个函数,该函数接收std :: string参数作为输入。为了调用它,您需要创建一个std :: string对象并将其作为函数的参数传递。如果希望将字符串作为输入给出,则可以使用以下语法:std::string move;cin >> move;Board.player1Move(move);另外,请注意,player2Turn应该调用Board.player2Move而不是Board.player1Move。

撒科打诨

drorco的答案中已经提供了解决问题的方法。我将尝试解释错误消息。当您具有非成员函数时,可以在表达式中使用函数名称,而无需使用函数调用语法。void foo(){}foo; // Evaluates to a function pointer.但是,当您具有成员函数时,在没有函数调用语法的表达式中使用成员函数名称无效。struct Bar{&nbsp; &nbsp;void baz() {}};Bar::baz;&nbsp; // Not valid.要获得指向成员函数的指针,您需要使用&运算符。&Bar::baz;&nbsp; &nbsp;// Valid这解释了Visual Studio的错误消息:"non-standard syntax; use '&' to create a pointer to member"
打开App,查看更多内容
随时随地看视频慕课网APP