调用类朋友函数的类成员函数(所有同类)可能吗?

时间:2014-10-10 01:35:46

标签: c++ class member friend-function

我有一个非常基本的类,包含成员函数和私有数据,但我希望print函数不是类成员函数的一部分。我从类中删除它并将其声明为朋友,它直接从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;
   }

1 个答案:

答案 0 :(得分:0)

printBoard内使用getMove时,printBoard确实尚未声明。您需要在printBoard之前移动getMove的定义(定义可用,也声明它)或至少添加声明

void printBoard(char [][ArrSize]);
课外的

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

PS:请在下次使用适当的缩进发布代码。很难检查括号是否平衡......