我的类(指向另一个类的指针的容器)似乎无法访问公共构造函数

时间:2016-07-02 14:49:41

标签: c++ qt pointers containers

我正在努力创建指向自制类对象的指针的QList,在本例中为 Node 。我尝试使用与 C ++设计模式简介,Ezust和Ezust的 Library 示例相同的方法。

由于某种原因,容器类 NodeList 无法访问 Node 类中的构造函数并抱怨它是私有的,即使它是公共的。

我尝试在 Node 的定义中使用friend关键字,但这也不起作用。我无法看到问题的来源,因为我以与教科书中的工作示例完全相同的方式引用指针。

#ifndef NODE_H
#define NODE_H

#include <QString>
#include <QList>

class Node
{
public:
    Node() {}
    void setNodeLabel(QString label);
    QString getNodeLabel();
    Node(QString label);

private:
    QString nodeLabel;
};


class NodeList : public QList<Node*>
{
public:
    NodeList() {}
    ~NodeList();
    void addNode(Node*& node);
private:
    NodeList(const NodeList&);
    NodeList& operator=(const NodeList&);
};

#endif // NODE_H

尝试编译时遇到的错误如下:

\qlist.h:106: error: 'struct QList<Node*>::Node' is private
 struct Node { void *v;
        ^

\node.h:25: error: within this context
 void addNode(Node*& node);
              ^

1 个答案:

答案 0 :(得分:3)

NodeList派生自QList<Node*>,其中有一个名为Node的嵌套类,位于private的{​​{1}}部分。在QList中的任何位置使用非限定类型Node时,该名称将解析为NodeList。因此,你得到了这个错误。

除非您打算向QList<Node*>::Node添加更多功能,否则您可以使用:

NodeList

并删除班级using NodeList = QList<Node*>;