现在我按照规则要求做了,并且首先看看是否已经回答了这个问题,虽然我确实找到了一个帖子,但它未能解决我的具体问题,因此我自己问.
对于一个简短的上下文,这个错误在我正在制作的双链表列表的节点类中,因此很明显节点必须对其进程和前面的邻居有一些了解
以下代码......
templateclass dslListNode { public: dslListNode(T data, dslListNode * next, dslListNode * prev) : m_data(data) { this->m_next = next; this->m_prev = prev; } T m_data; dslListNode * m_next, m_prev; //<-- line twelve void purge() { if (this->m_next != NULL) { this->m_next->purge(); delete this->m_next; } } private: };
...在第十二行不会停止给我以下错误
Error C2460 'dslListNode::m_prev': uses 'dslListNode ', which is being defined
所以你...
我老实说不知道现在发生了什么,我在c ++的技能还没达到我理解为什么会发生这种事情的程度,到目前为止互联网没有帮助这方面,因此我请求帮忙.
为什么会发生这种情况,我该怎么做才能解决它?
为我的语法和拼写道歉btw = D.
谢谢先进=)
这条线:
dslListNode* m_next, m_prev;
相当于:
dslListNode* m_next; // A pointer dslListNode m_prev; // An object.
dslListNode
在类的定义中有一个指针是可以的.语言允许指向不完整类型的指针.
但是,dslListNode
在定义类本身时,不能有类型的成员变量.它类似于:
struct A { A a; };
它不会起作用,因为定义A
需要定义A
.这导致无限下降.
你需要
dslListNode* m_next; // A pointer dslListNode * m_prev; // Another pointer.
你可以使用一个班轮来获得它:
dslListNode* m_next, *m_prev;
但是,两行版本更具可读性.我强烈建议使用它.