我有课
class ScoreBoard: public die
{ //..//
protected:
bool mSetValue[6];
public:
//...//
friend void ValueSet();
};
我希望利用这种友谊来访问mSetValue
。
所以我在ScoreBoard.cpp
中做的是:我预先设定一个函数(void ValueSet();
),然后像这样定义:
void ValueSet()
{ char lPick;
std::cin >> lPick;
if (lPick == 1) mSetValue[0] = true; }
但是调试器说:
'mSetValue'未在此范围内声明。
所以,我的问题是 - 如何正确设置友谊,以便ValueSet
可以访问mSetValue
数组?
答案 0 :(得分:1)
成员变量†存在于实例(对象)中。它们也被称为“实例变量”。如果没有该类的实例,则没有实例变量。
mSetValue
是ScoreBoard
的成员变量。因此,ScoreBoard::mSetValue
个实例仅存在于ScoreBoard
的实例中。
如何正确设置友谊,以便ValueSet可以访问mSetValue数组?
在功能void ValueSet()
中,您没有ScoreBoard
的任何实例。您无法访问ScoreBoard::mSetValue
- 无论其访问说明符还是友谊 - 因为它不存在。您需要的是ScoreBoard
的实例。
我在ScoreBoard类中使用此函数,因此我无法在其中创建任何ScoreBoard实例
没有什么可以阻止您在ScoreBoard
的成员函数中创建ScoreBoard
的实例。虽然,在ScoreBoard
的成员函数中,您已经可以访问由this
指向的实例,因此可能不需要创建新实例。你应该做什么取决于你的意图。
鉴于你的评论,我怀疑一个成员函数更适合你,而不是一个自由函数。
†为简单起见,我使用通用术语“成员变量”来引用非静态成员变量。静态成员变量是不同的。它们也被称为类变量。
答案 1 :(得分:1)
朋友职能不是班级成员。因此,如果您想在mSetValue
中使用ValueSet
,那么您必须通过实例或"对象"提供对mSetValue
的一些访问权限。那个班。这可以通过将ValueSet()
函数声明为
friend void ValueSet(ScoreBoard &sb);
你的定义为
void ValueSet(ScoreBoard &sb)
{
char lPick;
std::cin >> lPick;
if (lPick == 1)
sb.mSetValue[0] = true;
}