当前位置: 首页 > 知识库问答 >
问题:

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

强才捷
2023-03-14

我正在练习在链表类的实现中使用节点结构实现一个模板类链表。在createNode()成员函数中,当我初始化指向节点结构的指针变量时,会出现编译器错误:“未初始化的局部变量'newNode'已使用”

如果我将初始化更改为:

Node* newNode = new Node();

它工作得很好。如果我可以初始化基本数据类型,比如int,我有点困惑为什么这很重要:

int* intPtr;

为什么我不能对structs做同样的操作??我的代码如下:

#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个答案

通和裕
2023-03-14

你说:

如果我可以将int等基本数据类型初始化为:

int* intPtr;

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

int* intPtr;
*intPtr = 10;

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

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

这与使用

Node* newNode = new Node();
newNode->data = data;
newNode->next = nullptr;

在你的代码中。

 类似资料:
  • 问题内容: 我的Java程序中出现以下错误: Java变量未初始化错误…错误:变量nam和r未初始化位置类子级 但是并且已经初始化,但是我仍然遇到相同的错误。 问题答案: 不要获取 默认值 ,应在使用它们之前对其进行初始化,并使用main中的默认值进行初始化,这样就可以了。 顺便说一句,考虑为您的类和变量命名是有意义的。

  • 我有以下Java代码: 但是,当我运行它时,它会抛出以下错误: 我在do之前初始化了变量。while 循环,并在 try. 中设置值。捕获循环。似乎尚未设置该变量。抱歉,如果这是一个相当基本的问题,但我似乎无法弄清楚。

  • 我在这里看到过类似的问题,如果这看起来像是重复的,我很抱歉,但是类似问题的答案对我没有帮助。所以我有一个方法,它是类的一部分。这里是: 错误表明变量min可能尚未初始化。我不明白这怎么可能是真的。我觉得变量不可能不在for循环之外初始化。请帮忙。谢谢

  • 我试图为我的模板创建一个覆盖,以自定义扩展在文章中显示其字段的方式。 我使用的扩展是DPfields,我使用的是开发人员提供的参考指南:https://joomla.digital-peak.com/documentation/162-dpfields/2750-rendering-fields 特别是我提到的段落:访问布局中的字段 我已经创建了一个新的php文件从default.php文件开始的

  • 我认为我的模板使用不当,但我不知道我做错了什么。这就像模板链表无法确定它需要使用我的术语类一样。 名单- 以下是Visual Studio 2012的确切错误: > 错误LNK1120:1未解决的外部C:\用户\迈克尔\文档\魔术公文包\尚普兰\课程工作\数据结构\pa2\调试\pa2.exe 标题。H 功能。cpp 链接列表。H 术语h