Visual Studio 2015 «syntaxe non standard; utilisez ‘&’ pour créer un pointeur sur un membre ”

J’apprends le C ++ et j’essaye de faire un petit jeu de Tic Tac Toe. Mais je continue d’obtenir C3867, syntaxe non standard; utilisez ‘&’ pour créer un pointeur à retenir.

Voici mon TicTacToe.h:

#pragma once #include  using namespace std; class TicTacToe { public: TicTacToe(); ssortingng getName1(); ssortingng getName2(); void printBoard(); void clearBoard(); void setName1(ssortingng player1Name); void setName2(ssortingng player2Name); void setSign1(ssortingng player1Sign); void setSign2(ssortingng player2Sign, ssortingng player1Sign); void playGame(ssortingng player1Name, ssortingng player2Name,ssortingng player1Sign,ssortingng player2Sign); void player1Move(ssortingng coordX); void player1Turn(); void player2Turn(); private: char Board[3][3]; ssortingng _player1Name; ssortingng _player2Name; ssortingng _player1Sign; ssortingng _player2Sign; ssortingng _coordX; ssortingng _coordY; }; 

Et voici mon TicTacToe.cpp:

 #include "TicTacToe.h" #include  #include  TicTacToe::TicTacToe() {} void TicTacToe::playGame(ssortingng player1Name, ssortingng player2Name, ssortingng player1Sign, ssortingng 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 <> player1Name; _player1Name = player1Name; } void TicTacToe::setName2(ssortingng player2Name) { cout <> player2Name; _player2Name = player2Name; } ssortingng TicTacToe::getName1() { return _player1Name; } ssortingng TicTacToe::getName2() { return _player2Name; } void TicTacToe::setSign1(ssortingng player1Sign) { cout <> player1Sign; if (player1Sign != "X" && player1Sign != "O" && player1Sign != "x" && player1Sign != "o") { cout <> player1Sign; } _player1Sign = player1Sign; } void TicTacToe::setSign2(ssortingng player2Sign, ssortingng player1Sign) { cout <> player2Sign; if (player2Sign != "X" && player2Sign != "O" && player2Sign != "x" && player2Sign != "o" || player2Sign == player1Sign) { cout <> player2Sign; } _player2Sign = player2Sign; } void TicTacToe::player1Move(ssortingng coordX) // ERROR { cout << "Enter X: " <> coordX; _coordX = coordX; } void TicTacToe::player1Turn() { cout << "Player 1 turn !\n"; TicTacToe Board; Board.player1Move; } void TicTacToe::player2Turn() { cout << "Player 2 turn !\n"; TicTacToe Board; Board.player1Move; } 

J’ai tout essayé dans d’autres questions à propos de cette erreur mais cela n’a pas fonctionné. Comment corrigez-vous cette erreur?

Le problème est avec les lignes qui contiennent ce qui suit (il apparaît deux fois dans votre code):

 Board.player1Move; 

Le joueur un coup est une fonction qui reçoit un paramètre std :: ssortingng en tant qu’entrée. Pour l’appeler, vous devez créer un object std :: ssortingng et le transmettre en tant qu’argument de la fonction. Vous pouvez utiliser la syntaxe suivante si vous souhaitez que la chaîne soit donnée en entrée:

 std::ssortingng move; cin >> move; Board.player1Move(move); 

Notez également que player2Turn doit appeler Board.player2Move au lieu de Board.player1Move.

La solution à votre problème est déjà fournie dans la réponse de drorco . Je vais essayer d’expliquer le message d’erreur.

Lorsque vous avez une fonction non membre, vous pouvez utiliser le nom de la fonction dans une expression sans utiliser la syntaxe d’appel de fonction.

 void foo() { } foo; // Evaluates to a function pointer. 

Toutefois, lorsque vous avez une fonction membre, l’utilisation du nom de la fonction membre dans une expression sans la syntaxe d’appel de fonction n’est pas valide.

 struct Bar { void baz() {} }; Bar::baz; // Not valid. 

Pour obtenir un pointeur sur une fonction membre, vous devez utiliser l’opérateur & .

 &Bar::baz; // Valid 

Cela explique le message d’erreur de Visual Studio:

 "non-standard syntax; use '&' to create a pointer to member" 

J’obtenais ceci quand std::exception rapidement std::exception à une application pour try/catch blocs de code try/catch , comme ceci:

 try{ //code block }catch(std::exception e){printf("ERROR: %s", e.what()); return -1;} 

Je devais juste changer le paramètre pour que le nom de l’exception commence par & , comme suit:

 try{ //code block }catch(std::exception &e){printf("ERROR: %s", e.what()); return -1;}