【问题标题】:Linked-list with nested classes: how can I use nested class type before it is declared?带有嵌套类的链表:如何在声明嵌套类类型之前使用它?
【发布时间】:2015-10-24 10:36:47
【问题描述】:

好的,这是我的问题,如果有问题的话。

我正在构建一个链接列表。
该链表由类形式的元素组成。
因此,我有一个名为linked_list 的类和一个名为node 的嵌套类。

显然,主类用于处理节点并提供一些与它们交互的功能。

这里是它的外观草稿:

class linked_list
{
public:
    linked_list();
    ~linked_list();
    void setFirst(node *firstIn){first = firstIn;}
    node* getFirst(){return first};
    void forward();
    void forward(unsigned char);

private:
    node *first;
    node *current;

    class node
    {
    public:
        node();
        ~node();
        void function1();
        void function2();

    private:
        int various_data;
        node *next;
    };
};

现在,您可以想象,当我在 @987654325 的公共部分使用它时,编译器给了我一个错误(实际上是两个),告诉我 node 类型/类尚未声明@class 来声明函数的参数和返回类型。

我想我可以颠倒public:private: 部分,这样node 类的声明就在它的使用之前,但是这个escamotage 会让我的(轻度)强迫症非常恼火,以至于我无法忍受它。

除了把public:private:倒过来,真的没有别的办法了吗?
它杀了我!

【问题讨论】:

  • 为什么我得到-1?因为我没有给第一个回答的人一个简单的徽章?苛刻的观众,这个地方,为了帮助......
  • -2?可怜的孩子,他们不会得到奖品。

标签: c++ linked-list declaration nested-class


【解决方案1】:

您可以为此使用前向声明

#include ...

class node;

public class linked_list {
...
}

注意: 这违背了内部类的目的,因为您将它暴露在标题中。所以,做一个简单的练习是可以的,但会是一个糟糕的架构决策。

【讨论】:

  • 我希望这不会违反 stackOverflow 的任何规则,但是....我爱你,伙计。我的强迫症谢谢你。
  • @SergeBallesta 你是什么意思?我刚刚添加了前向声明,它可以工作,它可以编译并运行而没有任何抱怨。我应该注意的任何事情都可能破坏我的程序?
  • 好的,您的编辑澄清了 SergeBallesta(现已消失)的评论。所以呢?还有什么办法?
  • 要么像这样,要么像莫斯科的@Vlad 建议的那样。
  • 弗拉德的答案已被删除,天知道为什么,因此.....虽然这不是一个好的答案,但它仍然是我得到的唯一一个,我不明白为什么我不应该投票。然而,它似乎通过暴露一个类来取消将一个类嵌套在另一个类中的目的......
猜你喜欢
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多