好的,所以我的问题是这个。我需要复制一个定制的列表,并且该函数必须是我的列表类的私有成员。看起来像这样的自动取款机:
private:
struct List_Node* head_;
List* copy(List* list);
看起来像我知道的废话,但我被告知要这样做。得到编译错误:
error: `List* List::copy(List*)' is private
有什么方法可以解决这个问题还是我理解我的方向错误?
您需要从另一个成员函数(即public
.
您不能private
从类外部调用成员函数。该错误表明您正在这样做。
如果您List::copy
从(如标题所示)的成员函数中调用List
,您应该没有问题。
如果你想从类外部调用它,你将无法访问私有成员函数(例如copy
),除非你声明friend
类的调用函数 a
尝试使用复制构造函数或运算符=
重载。
我认为您被告知这样做是因为此类的用户不应该直接复制列表。列表节点也被声明为私有结构,外部函数无法访问。列表节点的构造和销毁都应该由这个类的成员方法来处理。
可能是因为这些原因,copy 方法应该受到保护,在这种情况下,声明为 private。
您可以在该类的任何成员方法中调用私有复制方法,包括公共方法。
尽管这不太可能发生,但您可以简单地声明一个仅调用此私有方法的公共成员方法,这会将私有方法暴露给外部函数。但是,首先将复制方法声明为私有是没有意义的。