【问题标题】:Using a class within it's own declaration在它自己的声明中使用一个类
【发布时间】:2012-04-22 15:31:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 代码还不够。
  • 这取决于你在哪里调用这个函数。这个“复制”方法只能从这个类的其他方法调用
  • 如果是C++,那么“struct List_Node*”可以简单地改成“List_Node*”。但是,您没有说明错误发生在哪里以及您是如何尝试使用它的。
  • 你真的需要调用copy 函数吗?您可以使用复制构造函数或重载运算符= 来复制数据。

标签: c++ list copy private


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2013-07-06
          • 1970-01-01
          • 1970-01-01
          • 2018-09-14
          • 2011-02-23
          • 1970-01-01
          • 1970-01-01
          • 2016-04-09
          • 1970-01-01
          相关资源
          最近更新 更多