-3

好的,所以我的问题是这个。我需要复制一个定制的列表,并且该函数必须是我的列表类的私有成员。看起来像这样的自动取款机:

private:
struct List_Node* head_;
List* copy(List* list);

看起来像我知道的废话,但我被告知要这样做。得到编译错误:

error: `List* List::copy(List*)' is private

有什么方法可以解决这个问题还是我理解我的方向错误?

4

4 回答 4

2

您需要从另一个成员函数(即public.

您不能private从类外部调用成员函数。该错误表明您正在这样做。

于 2012-04-10T10:37:16.470 回答
1

如果您List::copy从(如标题所示)的成员函数中调用List,您应该没有问题。

如果你想从类外部调用它,你将无法访问私有成员函数(例如copy),除非你声明friend类的调用函数 a

于 2012-04-10T10:38:24.090 回答
0

尝试使用复制构造函数或运算符=重载。

于 2012-04-10T10:49:01.277 回答
0

我认为您被告知这样做是因为此类的用户不应该直接复制列表。列表节点也被声明为私有结构,外部函数无法访问。列表节点的构造和销毁都应该由这个类的成员方法来处理。

可能是因为这些原因,copy 方法应该受到保护,在这种情况下,声明为 private。

您可以在该类的任何成员方法中调用私有复制方法,包括公共方法。

尽管这不太可能发生,但您可以简单地声明一个仅调用此私有方法的公共成员方法,这会将私有方法暴露给外部函数。但是,首先将复制方法声明为私有是没有意义的。

于 2012-04-10T11:19:55.513 回答