链表声明与原型不兼容

Linked List...declaration incompatible with the protoype

本文关键字:不兼容 原型 声明 链表      更新时间:2023-10-16

嘿,伙计们,所以当我试图为我的链表类创建这个函数时,我得到了这个错误。我遇到问题的函数是我的搜索函数。我甚至还没有开始创建这个函数,但是我收到的错误是在搜索函数的声明中。在第38行NodePtr下,它说它是未定义的,在搜索下,它说错误:声明与"LinkedList::NodePtr(在第17行声明)"不兼容。代码如下。谢谢你的帮助。

// LinkedListProject.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <list>
using namespace std;
class LinkedList {
public:
    struct Node {
        int data;
        Node* link;
    };
    typedef Node* NodePtr;
    //NodePtr head = new Node;
    void head_insert(NodePtr& head, int the_number);
    NodePtr search(NodePtr head, int target);
private:
};

int main()
{
    LinkedList obj;
    //obj.head->data = 3;
    //obj.head->link = NULL;
    return 0;
}

void LinkedList::head_insert(NodePtr& head, int the_number) {
    NodePtr temp_ptr = new Node;
    temp_ptr->data = the_number;
    temp_ptr->link = head;
    head = temp_ptr;
}
NodePtr LinkedList::search(NodePtr head, int target)
{
    return NodePtr();
}

你必须在定义NodePtr的地方设置正确的作用域。

 LinkedList::NodePtr LinkedList::search(NodePtr head, int target)
{
    return LinkedList::NodePtr();
}

NodePtr是一个限定于您的类的名称。为了在课外使用它,你需要LinkedList::NodePtr。所以你必须改变

NodePtr LinkedList::search(NodePtr head, int target)

LinkedList::NodePtr LinkedList::search(NodePtr head, int target)

现在你可能会问,"但是等等,我在搜索中不需要它,为什么呢?",答案是在你做了之后

LinkedList::search

类名被注入到函数作用域的其余部分。因此,我们不需要显式地限定任何作用域为类的名称。