我有一个非常基本的类,包含成员函数和私有数据,但我希望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;
}
答案 0 :(得分:0)
在printBoard
内使用getMove
时,printBoard
确实尚未声明。您需要在printBoard
之前移动getMove
的定义(定义可用,也声明它)或至少添加声明
void printBoard(char [][ArrSize]);
课外的(在任何地方使用它之前)。此外,您的代码无法编译,因为至少有一个拼写错误(大写,小写makeBoard),缺少makeBoard的定义,缺少getMove的右括号。另外,也许你想用TTTarray而不是0来调用printBoard?
PS:请在下次使用适当的缩进发布代码。很难检查括号是否平衡......