【问题标题】:A class member function calling a class friend function (all same class) Possible?一个类成员函数调用一个类友函数(都是同一个类) 可能吗?
【发布时间】:2014-10-10 01:35:45
【问题描述】:

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

【问题讨论】:

  • 这里肯定需要看一些代码。
  • 没有声明。您是否忘记在打印声明中包含头文件?
  • Dmitri - 感谢您的回复。不知道我是否明白你的意思。

标签: c++ class member friend-function


【解决方案1】:

getMove 中使用printBoard 时,printBoard 确实没有被声明。您需要将printBoard 的定义移到getMove 之前(定义可用,它也已声明)或至少添加一个声明

void printBoard(char [][ArrSize]);

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 2012-05-19
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多