基本的C ++编程问题

时间:2011-05-29 02:49:40

标签: c++ visual-c++

我正在学习c ++。我正在创建一个链表数据结构。显示结构中节点值的其中一个函数不起作用。由于某种原因,遍历节点的while循环在display函数中不起作用,因此我无法看到这些节点中的值。有谁看到问题是什么?我一直盯着代码一段时间,不知道这里有什么问题。 感谢您的帮助。 部首:

// linklist.h
// class definitions


#ifndef LINKLIST_H
#define LINKLIST_H

class linklist
 {
 private:
     // structure containing a data part and link part
     struct node
     {
         int data;
         node *link;
     }*p;

 public:

     linklist();
     void append(int num);
     void addatbeg(int num);
     void addafter(int loc, int num);
     void display();
     int count();
     void del(int num);
     ~linklist();
 };

#endif

.cpp file

// LinkedListLecture.cpp
// Class LinkedList implementation

    #include"linklist.h"
    #include<iostream>

using namespace std;


     // initializes data member
     linklist::linklist()
     {
         p =NULL;
     }

     // adds a node at the end of a linked list
     void linklist::append(int num)
     {
          node *temp, *r;
         // if the list is empty, create first node
         if(p==NULL)
         {
                 temp = new node;
             temp->data = num;
             temp->link = NULL;      
         }
         else
         {
             // go to last node
             temp = p;
             while(temp->link!=NULL)
                 temp =  temp->link;
             // add node at the end
             r = new node;
             r->data=num;
             r->link=NULL;
             temp->link=r;
         }
     }



 // displays the contents of the linked list
 void linklist::display()
 {
     node *temp = p;
     cout<< endl;
     // traverse the entire linked list
     while(temp!=NULL) // DEBUG: the loop doesn't work
     {
         cout<<temp->data<<" ";
         temp = temp->link;
     }

     void main() 
 {
     linklist l;

     l.append(14);
     l.append(30);
     l.append(25);
     l.append(42);
     l.append(17);
     cout<<"Elements in the linked list:";
     l.display(); // this function doesn't work
     system("PAUSE");
 }

2 个答案:

答案 0 :(得分:4)

您永远不会将p设置为非NULL值。

    if(p==NULL)
     {
         p = new node;
         p->data = num;
         p->link = NULL;      
     }

答案 1 :(得分:1)

我认为GWW已经强调了这个问题,但是学习如何编程来学习如何识别错误。

如果你做了某些事情并且没有得到预期的结果,你可以:

  • 使用visual c ++调试器逐步查看变量的值。
  • 输入日志行以报告您认为重要的信息
  • 检查代码 - 如果你认为某些东西是正确的但是它不起作用,那么请转到前一步并检查它是否做对了。
  • 添加单元测试,或按照合同添加前/后条件和类不变量进行设计。

通过编写链接列表来学习编写C ++就像通过添加1 + 1来学习数学一样。它是老式的思维,缓慢而且在没有任何上下文的情况下很无聊。 数学不算,就像C ++编程不是指针操作。在某些阶段你可能需要了解它,但最好还是学习其他重要的东西,比如stl和boost。

如果理解append()创建了某些内容,请找到列表的末尾,添加它。你可以看到,在你追加函数中你创建了一些混合uyp并移动到列表的末尾,但是你从不添加它。