[英]Can't get constructor to run
我正在尝试创建一个双向链接列表,其中每个列表都有第一个节点,最后一个节点和num_elements。 但是,由于某些原因,当我尝试测试UseList.cpp文件中的代码时,无法将num_elements设置为默认值零。
让我告诉你我的意思:
在List.h中:
template <class L>
class List
{
private:
Node<L> *first;
Node<L> *last;
int num_elements;
public:
// constructors and destructors
List();
[...]
}
[...]
template <class L>
List<L>::List() {
first = NULL;
last = NULL;
num_elements = 0;
}
[...]
这是list.h下方的show方法:
template <class L>
// Print out the data in each node separated by a space.
void List<L>::show() {
cout << num_elements << endl;
Node<L> *current_node = first;
while (current_node != NULL) {
cout << current_node->data << " ";
current_node = current_node->next;
}
cout << endl;
}
请注意,这里有一个cout语句来打印num_elements。
这是UseList.cpp的相关部分:
int main (int argc, char *argv[]) {
cout << "-----------------------------------------" << endl;
cout << "----------------LIST ONE-----------------" << endl;
cout << "-----------------------------------------" << endl;
List<int> *list1;
srand(time(NULL));
list1->show();
[...]
调用show时,它打印出“ 1”并给我一个分段错误。 为什么num_elements默认为“ 1”而不是“ 0”?
当我在List<L>::List() {
执行cout时,什么都不会打印出来……(这意味着构造函数永远不会运行?)
谢谢您的帮助!
您正在声明一个指向 List<int>
的指针 ,而不是将其初始化为任何内容。
您已经创建了一个指向List<int>
对象的指针,但是没有一个对象。 因此,当前,由于指针“悬空”,您的程序将分段错误。 当您尝试使用->
取消引用时,您正在访问的内存不是您的,它会失败。 要解决此问题,只需分配一个新的List对象:
List<int> *list1 = new List<int>();
不要忘记稍后释放它:
delete list1;
您的另一选择是不使用动态内存。 如果不需要,则不应使用它。
List<int> list1;
list1.show()
List<int> *list1;
声明list1
为指针。
List<int> *list1 = new List<int>();
实际上会创建List
的实例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.