模板链接列表|未初始化的变量错误

时间:2017-06-08 00:23:41

标签: c++ templates linked-list

我正在练习在Linked List Class的实现中使用Node结构实现模板类链接列表。在createNode()成员函数中,当我将指针变量初始化为节点结构时,我得到编译器错误:“未初始化的局部变量'newNode'使用了”

我发现如果我将初始化更改为:

Node* newNode = new Node();

它运作得很好。如果我能初始化基本数据类型如int as:

,我有点困惑,为什么这很重要
int* intPtr;

为什么我不能对结构做同样的事情?我的代码如下:

#include <iostream>
#include <string>

template<class T>
class LinkedList
{
private:
    struct Node
    {
        T data;
        Node* next;
    };
    Node* head;
    Node* tail;
    int size;

public:
    LinkedList() : head{ nullptr }, tail{ nullptr }, size{ 0 }
    {
    }

    Node* createNode(T data)
    {
        Node* newNode;
        newNode->data = data;
        newNode->next = nullptr;

        return newNode;
    }

    void display()
    {
        Node* currentNode = head;

        while (currentNode)
        {
            std::cout << currentNode->data << std::endl;
            currentNode = currentNode->next;
        }
    }

    void push(T data)
    {
        Node* newNode = createNode(data);

        if (size == 0)
        {
            head = newNode;
            tail = newNode;
        }
        else
        {
            tail->next = newNode;
            tail = newNode;
        }

        ++size;
    }
};

int main()
{
    LinkedList<int> list;

    list.push(5);
    list.push(3);
    list.push(6);

    list.display();

    std::cin.clear();
    std::cin.ignore(32767, '\n');
    std::cin.get();

    return 0;
}

1 个答案:

答案 0 :(得分:0)

你说:

  

如果我能初始化像int这样的基本数据类型,我有点困惑,为什么这很重要?

<TableRowColumn colSpan={6}>

这是一个错误的结论。如果您使用:

int* intPtr;

您可能会从编译器中看到相同的警告/错误。使用int* intPtr; *intPtr = 10; 的正确方法是确保在使用intPtr为其分配任何内容之前将其初始化为指向有效对象。

*intPtr

这类似于使用

int* intPtr = new int;
*intPtr = 10;

代码。