粗略地说,这就是我的代码:
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;
}
由于某些原因,当我尝试编译时,我的代码总是会将“错误:无效使用非静态数据成员”作为错误。显然上面的代码不是我所拥有的,但这是我得到的唯一错误。我认为使用友元功能的好处是你可以访问私人成员,但我似乎无法这样做。
答案 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而没有错误。分段错误可能是由于您的代码上的另一个错误。