在它自己的声明中使用一个类

时间:2012-04-10 10:34:53

标签: c++ list copy private

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

private:
struct List_Node* head_;
List* copy(List* list);
看起来像废话我知道,但我被告知这样做。 得到编译错误:

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

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

4 个答案:

答案 0 :(得分:2)

您需要从另一个成员函数public中调用该函数。

您无法从课外调用private成员函数。错误表明你正在这样做。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

尝试使用copy-constructor或operator =重载。

答案 3 :(得分:0)

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

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

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

虽然不太可能发生,但您可以简单地声明一个只调用此私有方法的公共成员方法,该方法将私有方法公开给外部函数。但是,首先将复制方法声明为私有是没有意义的。