当前位置:  开发笔记 > 编程语言 > 正文

"A使用B,正在定义"是什么意思?

如何解决《"A使用B,正在定义"是什么意思?》经验,为你挑选了1个好方法。

现在我按照规则要求做了,并且首先看看是否已经回答了这个问题,虽然我确实找到了一个帖子,但它未能解决我的具体问题,因此我自己问.

对于一个简短的上下文,这个错误在我正在制作的双链表列表的节点类中,因此很明显节点必须对其进程和前面的邻居有一些了解

以下代码......

    template class 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.

谢谢先进=)



1> R Sahu..:

这条线:

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;

但是,两行版本更具可读性.我强烈建议使用它.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有