调用类友功能的类成员函数(全部同一类)可能吗?
问题描述:
我有一个非常基本的类与成员函数和私人数据,但我希望打印功能不成为类成员函数的一部分。我将它从类中移除并将其声明为朋友,它在直接从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;
}
答
,在您使用printBoard
内getMove
点,printBoard
确实尚未声明。您需要可以移动的printBoard
定义getMove
之前(与现有的定义,它也宣告)或添加至少一个声明
void printBoard(char [][ArrSize]);
类(你在任何地方使用它之前也)之外。此外,由于至少有一个拼写错误(大写,小写makeBoard),您的代码无法编译,makeBoard的定义丢失,并且getMove的大括号丢失。另外,也许你想用TTTarray而不是0调用printBoard?
PS:请在下次张贴适当缩进的代码。真的很难检查括号是否像这样平衡......
绝对需要在这里看到一些代码。 – 2014-10-10 01:40:26
它没有被宣布。你忘了包含打印声明的头文件吗? – 2014-10-10 01:51:29
德米特里 - 感谢您的回应。不知道我是否知道你的意思。 – Jesse 2014-10-10 03:06:52