c++友元函数不能访问私有成员
C++ Friend Function not accessing private members
我正在尝试制作一款国际象棋游戏(对我来说这是一个终极挑战),我对这个部分很感兴趣。
所以我制作了一个棋子对象,我的想法是在主游戏代码中,我有一个棋子数组,我将数组的地址传递给函数"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_ )
另外:注意保留标识符。
相关文章:
- 这是关于成员访问规则的正确摘要吗
- 为什么我在空指针错误(链表)中获取成员访问权限
- 成员访问是否在空指针上定义C++?
- C++ IDE 不会推断/自动完成对模板类中的 std::array 下标表达式的成员访问
- 为什么类成员数据必须是静态的才能被模板化类的模板化结构成员访问
- 为什么c++允许成员函数定义中实例的私有成员访问
- C/C++ 包含点的宏参数(成员访问运算符)
- 访问说明符(私有/公共/受保护)如何在内部工作(限制成员访问)?
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 内部类私有成员访问和封闭的友好性
- 通过 C++ 中的另一个结构成员访问结构
- 具体化 PRVALUES 成员访问的 decltype 行为不正确
- 常量表达式中的静态成员访问
- XVALUE来自类成员访问表达式
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- 如何访问模板参数的成员?“成员访问不完整的类型”
- 不明确的可变参数类成员访问
- C 受保护的成员访问
- 将typeID转换为静态成员访问(C )的命名空间