C++友元函数
C++ friend function
我正在为我的大学制作国际象棋游戏,我必须至少使用一个朋友功能。
这是我的 BoardField class header:
#include "Game.h"
class BoardField {
private:
ChessPiece m_piece;
SDL_Rect m_field;
public:
BoardField();
friend void Game::init_board_fields();
};
部分游戏classheader:
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;
}
}
}
所以我得到了这个错误(在最后一个代码块中查找注释)。
friend是我理解能力太差了吗?此关键字是否允许访问 private members/methods 或执行其他操作?
我只想说,友元方法 c++ 不属于任何 class。话虽如此,您的朋友方法不是 class BoardField 的一部分,但它正在尝试访问其私有成员(这是错误的)。
游戏 class header 必须在 Game.cpp 中实现,而不是在 BoardField class 中实现。
您收到错误是因为您试图通过 Game class.Here 中声明的方法访问 BoardField class 的私有成员,我忽略了朋友概念。
在您的案例中使用好友概念的正确方法是让您的 BoardField Class 成为游戏好友 Class。这样,Game class 将可以访问 class BoardField 中的所有内容。这最终将在您尝试做的事情中发挥作用。
您只需在游戏中声明:朋友 BoardField class。
class Game {
private:
//members
...
//methods
friend BoardField;
...
public:
void init_board_fields();
...
};
我正在为我的大学制作国际象棋游戏,我必须至少使用一个朋友功能。
这是我的 BoardField class header:
#include "Game.h"
class BoardField {
private:
ChessPiece m_piece;
SDL_Rect m_field;
public:
BoardField();
friend void Game::init_board_fields();
};
部分游戏classheader:
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;
}
}
}
所以我得到了这个错误(在最后一个代码块中查找注释)。 friend是我理解能力太差了吗?此关键字是否允许访问 private members/methods 或执行其他操作?
我只想说,友元方法 c++ 不属于任何 class。话虽如此,您的朋友方法不是 class BoardField 的一部分,但它正在尝试访问其私有成员(这是错误的)。
游戏 class header 必须在 Game.cpp 中实现,而不是在 BoardField class 中实现。 您收到错误是因为您试图通过 Game class.Here 中声明的方法访问 BoardField class 的私有成员,我忽略了朋友概念。
在您的案例中使用好友概念的正确方法是让您的 BoardField Class 成为游戏好友 Class。这样,Game class 将可以访问 class BoardField 中的所有内容。这最终将在您尝试做的事情中发挥作用。
您只需在游戏中声明:朋友 BoardField class。
class Game {
private:
//members
...
//methods
friend BoardField;
...
public:
void init_board_fields();
...
};