2014-10-10 74 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:請在下次張貼適當縮進的代碼。真的很難檢查括號是否像這樣平衡......

相關問題