[英]Accessing static variable from a friend function
class Base
{
private:
static int num;
public:
friend void setnum(Base obj);
};
void setnum(Base obj)
{
obj.num=4; /* Error */
}
友元函数应该可以访问类的所有私有数据。 我在这里错过了什么? 我似乎无法从朋友函数访问静态变量。
来自键盘的错误--> 在函数
setnum(Base)': undefined reference to
Base::num' 的setnum(Base)': undefined reference to
来自 Visual Studio 的错误--> 错误 LNK2001:未解析的外部符号“private: static int Base::num”
您的自由函数称为setvals
,但Base
的友元函数称为setnum
...
此外,您必须实际定义静态变量,而不仅仅是声明它。
放:
int Base::num;
在源文件中。
您只声明了静态变量num
。 您必须定义它:
class Base
{
private:
static int num;
public:
friend void setvals(Base obj);
};
// This must be in a .cpp
int Base::num;
void setvals(Base obj)
{
obj.num=4;
}
此代码有效。
编辑:
实际上你可以实现setvals()
函数如下:
void setvals()
{
Base::num=4;
}
在你的基础课上:
friend void setvals();
因为num
是静态的。
静态变量不属于类的任何特定实例。 相反,您可以使用类名作为Base::num
访问它们以提高可读性。 此外,您的朋友函数定义的签名与您声明的签名不同。
不一样的朋友:
friend void setnum(Base obj);
// ^^^ Not the same as vals!
void setvals(Base obj)
在 C++ 中,在 .h 中声明一个静态变量是不够的; 您还必须在 .cpp 中明确定义它。 您必须在实现的 .cpp 中添加
int Base::num;
由于缺少变量定义,您得到的是链接器错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.