我正在练习在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;
}
答案 0 :(得分:0)
你说:
如果我能初始化像int这样的基本数据类型,我有点困惑,为什么这很重要?
<TableRowColumn colSpan={6}>
这是一个错误的结论。如果您使用:
int* intPtr;
您可能会从编译器中看到相同的警告/错误。使用int* intPtr;
*intPtr = 10;
的正确方法是确保在使用intPtr
为其分配任何内容之前将其初始化为指向有效对象。
*intPtr
这类似于使用
int* intPtr = new int;
*intPtr = 10;
代码。