无法让构造函数运行

时间:2011-10-23 02:13:45

标签: c++ constructor

我正在尝试创建一个双向链表,其中每个列表都有第一个节点,最后一个节点和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 method:

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;
}

请注意,那里有一个用于打印num_elements的cout语句。

这是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时,没有打印任何内容......(这意味着构造函数永远不会运行?)

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

您正在向List<int>声明指针,而不是将其初始化为任何内容。

答案 1 :(得分:2)

您已创建指向List<int>对象的指针,但没有对象。因此,目前,您的程序将分段错误,因为指针是“悬空”。当您尝试使用->取消引用它时,您正在访问不属于您的内存,并且它会失败。要解决此问题,只需分配一个新的List对象:

List<int> *list1 = new List<int>();

不要忘记以后释放它:

delete list1;

您的另一个选择是不使用动态内存。如果你不需要,你不应该使用它。

List<int> list1;

list1.show()

答案 2 :(得分:0)

List<int> *list1;

声明list1为指针。

List<int> *list1 = new List<int>();

实际上会创建List

的实例