c++友元函数不能访问私有成员

C++ Friend Function not accessing private members

本文关键字:成员 访问 不能 友元 函数 c++      更新时间:2023-10-16

我正在尝试制作一款国际象棋游戏(对我来说这是一个终极挑战),我对这个部分很感兴趣。

所以我制作了一个棋子对象,我的想法是在主游戏代码中,我有一个棋子数组,我将数组的地址传递给函数"InitilisePieces"和团队(黑或白),它将分配所有的棋子。因此,我将该函数设置为好友,以访问所有私有成员,它出现了一个错误,说"不可访问",我不明白这样做有什么问题。任何帮助都将非常感激!

旁注:像State_和_Location以及结构和枚举这样的东西被正确定义等,不是问题…(我不认为)

头文件包含:

class   __Piece
{
private:
    State_              e_state;
    Piece_Type_         e_type;
    Team_               e_team;
    _Location           st_location;
    friend void         InitilisePieces     ( __Piece(*)[16], Team_);
public:
    __Piece             ();
};

.cpp文件包含:

void                    InitilisePieces     ( __Piece * pao_piece[16], Team_ )
{
    int         n_count;
    for ( n_count = 0; n_count < 16; n_count++ )
    {
        pao_piece[ n_count ]->e_state;
    }
}
更新:

谢谢你的解释,我现在知道我错在哪里了…那么参数应该是什么来传递__Piece数组的地址呢?

友元函数和稍后定义的函数具有相同的名称,但签名不同。您没有定义好友函数。

void InitilisePieces( __Piece(*)[16], Team_);

不一样
void InitilisePieces( __Piece * pao_piece[16], Team_ )

前者的第一个形参是指向包含16个__Piece的数组的指针。后者的第一个参数调整为__Piece** pao_piece,即指向指向__Piece的指针的指针。换句话说,它是这样的:

void InitilisePieces( __Piece** pao_piece, Team_ )

另外:注意保留标识符