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确实没有被声明。您需要移动printBoard之前的定义getMove(定义可用,它也已声明)或至少添加一个声明

void printBoard(char [][ArrSize]);

在课堂之外(也在你在任何地方使用它之前)。此外,您的代码无法编译,因为至少有一个错字(大写,小写 makeBoard),缺少 makeBoard 的定义,缺少 getMove 的右大括号。另外,也许你想用 TTTarray 而不是 0 来调用 printBoard?

PS:请下次发布带有适当缩进的代码。真的很难检查括号是否像这样平衡......

于 2014-10-10T04:08:15.207 回答