朋友ostream&运营商LT;<无法访问私人会员

时间:2018-04-15 14:44:57

标签: c++ friend

粗略地说,这就是我的代码:

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;
}

由于某些原因,当我尝试编译时,我的代码总是会将“错误:无效使用非静态数据成员”作为错误。显然上面的代码不是我所拥有的,但这是我得到的唯一错误。我认为使用友元功能的好处是你可以访问私人成员,但我似乎无法这样做。

2 个答案:

答案 0 :(得分:1)

友元函数是外部函数w.r.t.您正在定义它的类。您可以访问私有成员,但没有r={1,1}指针可用。

因此,你应该改变

0

(281 * 1) / 48000

this实施中。

答案 1 :(得分:1)

就目前情况而言,您使用的是num_变量,就好像它是一个静态成员变量一样,就好像它不属于某个类的特定对象,但属于整个类。您需要做的是指示您需要通过您访问其私有成员变量num_的对象&lt;&lt;运营商。你需要这样做:

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而没有错误。分段错误可能是由于您的代码上的另一个错误。