【发布时间】:2018-04-02 21:11:03
【问题描述】:
我为通用链表编写了这段代码:
#include <iostream>
#include <stdio.h>
template <class T>
struct Node{
T data;
Node<T> *next;
};
template <class T>
class LinkedList{
Node<T>* head;
int size;
public:
LinkedList<T>() {
size = 0;
head = NULL;
}
void ll_push(T data){
Node<T>* new_node;
new_node->data = data;
new_node->next = head;
head = new_node;
size ++;
}
int ll_size(){
return size;
}
void ll_print_int(){
Node<T> *start = head;
while (start != NULL){
cout<< start->data;
start = start->next;
cout<< ",";
}
}
};
int main(){
LinkedList<int> ll;
for(int i = 0; i < 10; i++){
ll.ll_push(i);
}
ll.ll_print_int();
return 0;
}
但每当我尝试执行 ll_print 时,都会收到分段错误错误。我想我可能会在某些时候滥用指针,但我不确定。我仍然是 C++ 的新手,所以如果有人能解释我做错了什么,我将不胜感激。
【问题讨论】:
-
谢谢,但这并不能解决问题
-
任何自尊的编译器都会因为这个常见的编程错误而发出诊断消息,并且很可能您的编译器这样做了,但是您忽略它,因为它确实生成了一个已编译的程序。好吧,您刚刚学到了非常宝贵的一课:即使编译器成功生成了编译程序,也不要忽略来自编译器的警告和其他诊断消息。你的编译器对你咆哮是有原因的,并不是因为你的编译器喜欢生成长而令人困惑的消息。
-
@Robot0110 我还是个 C++ 新手 -- 但是你正在尝试编写一个只有中高级程序员才能编写的程序 正确,即使是中级程序员也可能会错过一些重要的细节。
-
它没有解决它,因为显示的代码不是真实代码,而是幻想代码。它无法编译,因为显示的代码缺少一些明显的语句。它指的是
cout,但看不到using namespace std;。除此之外,谁知道还有哪些实际代码被遗漏了,并且没有显示出来。它可能还有其他常见的错误,但由于没有显示真实的代码,因此无法给出真正的答案。
标签: c++ class templates linked-list