C++ Friend Функция не имеет доступа к закрытым членам
Поэтому я пытаюсь сделать игру в шахматы (немного сложным для меня), и я являюсь пнем для этой части..
Итак, я сделал объект-кусок, и идея в том, что в основном игровом коде у меня есть массив частей, и я передаю адрес массива функции "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?
1 ответ
Функция вашего друга и функция, которую вы определили позже, имеют то же имя, но разные подписи. Вы не определили функцию друга.
это
void InitilisePieces( __Piece(*)[16], Team_);
не такой как этот
void InitilisePieces( __Piece * pao_piece[16], Team_ )
Первый параметр первого является указателем на массив из 16 __Piece
s. Первый параметр последнего настроен на __Piece** pao_piece
указатель на указатель на __Piece
, Другими словами, это так:
void InitilisePieces( __Piece** pao_piece, Team_ )
Также: следите за зарезервированными идентификаторами.