【发布时间】:2023-04-05 18:49:01
【问题描述】:
我正在尝试重载模板类的赋值 ('=') 运算符,但我需要 operator= 方法作为友元函数。
我虽然这很简单,但我做错了,因为下面的代码会导致编译错误:
错误 C2801:'operator =' 必须是非静态成员
template <typename T>
class IDataStream
{
public:
friend void operator=(const IDataStream& dataStream)
{
// set some private members, e.g.
// this->{...} = dataStream.{...};
};
}
有人可以告诉我我的方式的错误吗-我已经陷入了困境:( 谢谢。
【问题讨论】:
-
为什么一定要
friend? -
@0x499602D2 因为在operator=中,我需要访问IDataStream的私有成员。
-
那么它只是一个普通的成员函数有什么问题呢?成员函数可以访问私有数据,因为它们属于类本身。此外,您不能使赋值运算符成为非成员函数(您正在通过“结交”它来做到这一点)。
-
operator=不能是非会员。它总是需要两个参数,隐含的this和右手边。 -
但是成员函数可以访问私有成员
标签: c++ templates operator-overloading friend-function