[英]Friend function and protected data
我有课
class ScoreBoard: public die
{ //..//
protected:
bool mSetValue[6];
public:
//...//
friend void ValueSet();
};
我想利用这种友谊来访问mSetValue
。 因此,我在ScoreBoard.cpp
是:我void ValueSet();
定义了一个void ValueSet();
),然后按以下方式定义它:
void ValueSet()
{ char lPick;
std::cin >> lPick;
if (lPick == 1) mSetValue[0] = true; }
但是调试器说:
未在此范围内声明“ mSetValue”。
因此,我的问题是-如何正确设置友谊,以便ValueSet
可以访问mSetValue
数组?
成员变量†存在于实例(对象)内部。 它们也称为“实例变量”。 如果没有该类的实例,则没有实例变量。
mSetValue
是ScoreBoard
的成员变量。 因此, ScoreBoard::mSetValue
实例仅存在于ScoreBoard
实例中。
如何正确设置友谊,以便ValueSet可以访问mSetValue数组?
在void ValueSet()
函数中,您没有ScoreBoard
任何实例。 您不能访问ScoreBoard::mSetValue
不管其访问说明符或友好关系-因为它不存在。 您需要的是ScoreBoard
一个实例。
我在ScoreBoard类中使用了此函数,因此无法在其中创建ScoreBoard的任何实例
没有什么能阻止你从创建的实例ScoreBoard
的成员函数内的ScoreBoard
。 尽管在ScoreBoard
的成员函数中您已经可以访问实例(由this
指向),所以可能不需要创建新实例。 您应该做什么取决于您的意图。
根据您的评论,我怀疑成员函数比自由函数更适合您。
†为了简化起见,我使用通用术语“成员变量”来指代非静态成员变量。 静态成员变量是不同的。 它们也称为类变量。
朋友功能不是该类的成员。 所以你的情况,如果你想使用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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.