[英]Friend ostream& operator<< can't access private member
大致来说,这就是我的代码:
template<typename K, typename V>
class A{
private:
size_t num_;
public:
A(initializer_list< something<K,V> > smthng);
friend ostream& operator<<(ostream &out, const A &as){
size_t number = num_;
};
};
template<typename K, typename V>
A<K,V>::A(initializer_list< something<K,V> > smthng){
size_t sz = 5;
num_ = sz;
}
由于某种原因,当我尝试编译时,我的代码将始终将“错误:无效使用非静态数据成员”作为错误。 显然,上面的代码不是我确切拥有的,但这是我遇到的唯一错误。 我以为使用好友功能的好处是可以访问私有成员,但我似乎做不到。
朋友函数是使用您要在其中定义类的外部函数。您可以访问私有成员,但没有this
指针可用。
因此,您应该更改
size_t number = num_;
与
size_t number = as.num_;
在operator<<()
实现中。
就目前而言,您正在使用num_变量,就好像它是一个静态成员变量一样,也就是说,好像它不属于某个类的特定对象而是属于整个类。 您需要做的是指示需要通过<<操作符访问其私有成员变量num_的对象。 您需要做:
class A{
private:
int num_;
public:
A();
friend std::ostream& operator<<(std::ostream &out, const A &as)
{
int number = as.num_;
out << number << std::endl;
}
};
A::A()
{
int sz = 5;
num_ = sz;
}
int main()
{
A object;
std::cout << object << std::endl;
return 0;
}
这对我来说很好。 尝试按原样进行编译,您会在控制台上看到无错误显示5。 分段错误可能是由于代码上的另一个错误。
我对运算符有同样的问题,它没有访问该类的私有成员。
class X {
char* xName;
double dd;
public:
X(char*, double);
X(const X&);
~X();
X& operator=(const X&);
friend ostream& operator<<(ostream&, X&);
};
//in cpp
ostream& operator<<(ostream& o, X& obj) {
/*when i try the following i have error msg saying that private member xName is
inaccessible*/
o>> obj.xName >> endl;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.