【发布时间】:2018-08-11 16:44:54
【问题描述】:
我正在为我的大学制作国际象棋游戏,我必须使用至少一个朋友功能。
这是我的 BoardField 类头:
#include "Game.h"
class BoardField {
private:
ChessPiece m_piece;
SDL_Rect m_field;
public:
BoardField();
friend void Game::init_board_fields();
};
部分游戏类头:
class Game {
private:
//members
...
//methods
...
public:
void init_board_fields();
...
};
以及方法:
void Game::init_board_fields()
{
int field_width = m_window_props.w / 8;
int field_height = m_window_props.h / 8;
int field_index = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
BoardField field;
// here I get the error that member m_field is inaccessible
field.m_field = { j * field_width, i * field_height, field_width, field_width };
m_board_fields[field_index++] = field;
}
}
}
所以我收到此错误(在最后一个代码块中查找注释)。 我对朋友了解不够吗?此关键字是否允许访问私有成员/方法或执行其他操作?
【问题讨论】:
-
这个访问应该没问题。
-
尝试构建,你的 IDE 很可能会给你那个不是实际错误的错误。
-
我试图编译,我也得到了这个错误:“游戏”不是 boardfield.h 中的类或命名空间名称
-
tutorialspoint.com/cplusplus/cpp_friend_functions.htm 你可以结交整个类或某个函数(免费的 C 风格函数),但不能结交方法。