C ++链表中保存的变量数据丢失

时间:2015-04-03 21:01:24

标签: c++ linked-list

我使用链接列表来存储用户输入,然后使用他们的输入进行计算。当我尝试使用链表时,调试显示列表为空。

第一个函数是House对象的构造函数,它创建一个Room链表,用于存储房间的长度和宽度。

House::House(){

    int tempwid = 0;
    int templen = 0;
    houseSize = 0;
    bool cont = true;

    node *root; 
    node *conductor;  

    root = new node;
    root->next = 0;

    conductor = root;

    if (conductor != 0) {
        while (cont){

            houseSize++;
            tempwid = 0;
            templen = 0;

            if(tempwid == -1 || templen == -1){
                cont = false;
            }//End if

            else{

                cout << "\nPlease enter the dimensions for room #" << houseSize << ". Enter a -1 when you are finished.";
                cout << "\nWidth? ";
                cin >> tempwid; 
                cout << "Length? ";
                cin >> templen; 

                if(tempwid == -1 || templen == -1){
                    cont = false;
                }//End if

                else{
                    conductor->width=tempwid;
                    conductor->length=templen;  

                    conductor->next = new node;
                    conductor = conductor->next;
                    conductor->next = 0;

                }//End else

            }//End else
        }//End while

        conductor->next = new node;  
        conductor = conductor->next;
        conductor->next = 0;       

    }//End if

}//End constructor

这个功能只需要占用所有房间的长度和宽度,并计算整个房屋的面积。

double House :: calculateTax(double tax){

    node *root; 
    node *conductor;  

    double totalArea = 0;
    int i = 0;

    conductor = root;

    while (conductor->next!=0){
        cout <<"Length: " << conductor->length;
        cout <<"Width: " << conductor->width;

        totalArea += conductor->length * conductor->width;

        conductor = conductor->next;

    }//End while

    totalArea *= tax;
    return totalArea;

}//End Function

1 个答案:

答案 0 :(得分:3)

您在两种方法中使用局部变量rootconductor,而不是类成员。您没有提供类声明来查看这些成员是否存在,但即使它们存在,它们也会使用相同的名称用局部变量进行遮蔽。局部变量的值不在不同的函数和方法之间共享,也不在同一函数/方法的不同调用之间共享。这就是他们被称为 local 的原因。