繁体   English   中英

编译器错误,链接列表:错误:“->”的基操作数具有非指针类型“IntNodeType”

[英]Compiler Error, Linked list: error: base operand of ‘->’ has non-pointer type ‘IntNodeType’

下面我有一些基本代码,我正在学习链表。 此函数传递一个数组并从中创建一个链表。 但是,当我尝试编译它时,我收到一个关于非指针类型的错误。 谁能告诉我我做错了什么? 谢谢

struct IntNodeType {
   int value;
   IntNodeType * next;

   IntNodeType (int v=0, IntNodeType * p=NULL):value(v),next(p)
   {

   }
};
IntNodeType *  InitList (int a[], int size)
{
        IntNodeType *p;

        p = new IntNodeType[size];
        int i = 0;

        while ( i < size )
        {
                p[i]->value = a[i];

                if ( i == size - 1)
                {
                        p[i] -> next = NULL;
                        break;
                }
                else
                        p[i] -> next = p[i+1];

                i++;
        }

        return p;

}

为了正确编译你的代码,InitList 的主体应该是:

    // ..
    IntNodeType *p;

    p = new IntNodeType[size];
    int i = 0;

    while ( i < size )
    {
            p[i].value = a[i]; // here

            if ( i == size - 1)
            {
                    p[i].next = nullptr; // here + nullptr
                    break;
            }
            else
                    p[i].next = &(p[i+1]); //here

            i++;
    }

    return p;

请注意使用句点运算符而不是->运算符。

尽管p是数组类型(可以衰减为指针),但其内容不是指针。 p包含size许多IntNodeType s。 对于最后注意到的行,您需要将其传递给非指针p[i+1]

还值得注意的是,您应该在NULL使用nullptr

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM