private:
struct List_Node* head_;
List* copy(List* list);
看起来像废话我知道,但我被告知这样做。
得到编译错误:
error: `List* List::copy(List*)' is private
有什么方法可以解决这个问题,还是我理解错误的指示?
答案 0 :(得分:2)
您需要从另一个成员函数public
中调用该函数。
您无法从课外调用private
成员函数。错误表明你正在这样做。
答案 1 :(得分:1)
如果您从List::copy
的成员函数中调用List
(如标题所示),则应该没有问题。
如果你想从课外调用它,你将无法访问私有成员函数(例如copy
),除非你将调用函数声明为类的friend
答案 2 :(得分:0)
尝试使用copy-constructor或operator =
重载。
答案 3 :(得分:0)
我认为你这样做是因为这个类的用户不应该直接复制列表。列表节点也被声明为私有结构,外部函数无法访问。列表节点的构造和销毁应该由该类的成员方法处理。
可能是因为这些原因,复制方法应该受到保护,在这种情况下,声明为私有。
您可以在此类的任何成员方法中调用私有复制方法,包括公共方法。
虽然不太可能发生,但您可以简单地声明一个只调用此私有方法的公共成员方法,该方法将私有方法公开给外部函数。但是,首先将复制方法声明为私有是没有意义的。