2014-10-10 92 views
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; 
    } 
+0

绝对需要在这里看到一些代码。 – 2014-10-10 01:40:26

+0

它没有被宣布。你忘了包含打印声明的头文件吗? – 2014-10-10 01:51:29

+0

德米特里 - 感谢您的回应。不知道我是否知道你的意思。 – Jesse 2014-10-10 03:06:52

回答

0

,在您使用printBoardgetMove点,printBoard确实尚未声明。您需要可以移动的printBoard定义getMove之前(与现有的定义,它也宣告)或添加至少一个声明

void printBoard(char [][ArrSize]); 

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

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

相关问题