1

メンバー関数とプライベート データを含むかなり基本的なクラスがありますが、印刷関数をクラス メンバー関数の一部にしないでください。クラスから削除してフレンドとして宣言すると、main.cpp から直接呼び出すと機能しますが、クラス メンバー関数が内部で呼び出すと宣言されません。友達であることでデータにアクセスできることは知っていますが、メンバー関数でデータを利用できるようにするにはどうすればよいでしょうか? 出来ますか?

//HEADER FILE
#include<iostream>

using namespace std;

static const int ArrSize=3;

class TicTacToe
  {
    //friends
    friend void printBoard(char [][ArrSize]);

    //member functions
    public:
    void makeboard();
    void isValidMove();
    void isWinner();
    void getMove();

    //data members
    private:
    int pRow, pCol, player;
    bool validMove, winner;
    char TTTarray[ArrSize][ArrSize];
};

void TicTacToe::getMove()
{
  //  some internal code for determining if proper input
  // calls printBoard() to show what move was made.
  printBoard(0);

void printBoard(char TTTarray[][ArrSize])
{
  int i;
  for(i=0;i<3;i++)
    {
      cout << TTTarray[i][0] << " " << TTTarray[i][0] << " " << TTTarray[i][2] << endl;
    }
  }

  // MAIN.CPP FILE
  #include <iostream>
  #include "TicTacToe.h"

  using namespace std;

  int main()
  {
    TicTacToe a;
    a.makeBoard();
    printBoard(0);
    a.getMove();

    return 0;
   }
4

1 に答える 1

0

printBoardinsideを使用する時点ではgetMoveprintBoard実際には宣言されていません。printBoardbeforeの定義を移動するgetMove(定義が利用可能で、それも宣言されている) か、少なくとも宣言を追加する必要があります。

void printBoard(char [][ArrSize]);

クラス外 (また、どこかで使用する前)。さらに、少なくとも 1 つのタイプミス (大文字、小文字の makeBoard) があり、makeBoard の定義が欠落しており、getMove の右中括弧が欠落しているため、コードはコンパイルされません。また、0 の代わりに TTTarray を指定して printBoard を呼び出したいですか?

PS: 次回は適切なインデントを付けてコードを投稿してください。このように括弧のバランスが取れているかどうかを確認するのは本当に難しいです...

于 2014-10-10T04:08:15.207 に答える