我正在努力创建指向自制类对象的指针的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);
^
答案 0 :(得分:3)
NodeList
派生自QList<Node*>
,其中有一个名为Node
的嵌套类,位于private
的{{1}}部分。在QList
中的任何位置使用非限定类型Node
时,该名称将解析为NodeList
。因此,你得到了这个错误。
除非您打算向QList<Node*>::Node
添加更多功能,否则您可以使用:
NodeList
并删除班级using NodeList = QList<Node*>;
。