0

我正在尝试编写复数的动态链接列表。基本上:我有一个类list,其中包含一个number包含 class的结构complex。盒中盒中盒。我在引用复数本身时遇到问题(我只有添加节点的函数。到目前为止我的代码:

复杂的.h

class complex
    {
    public:   
        float r;
        float i;
    };

列表.h

#include "complex.h"
class list

{

public: 
typedef struct number
{
    complex a;

    struct number *next;
}number;

number *number;

public:
        void add(number* number,complex b);
        list();
        ~list();

};

list.cpp(包含函数添加,不起作用)

void list::add(number* number, complex b)
{
        number *newo=new number;        

         while (number->next != NULL)         
             { 
             number = number->next;
             }

          newo = malloc (sizeof(number)); 
          newo->a::r = b::r;  
          newo->a::i = b::i; 
          newo->next = NULL;                
          number->next = newo;      

}

感谢帮助 ;)

4

2 回答 2

3

这些线

      newo->a::r = b::r;  
      newo->a::i = b::i; 

应该

      newo->a.r = b.r;  
      newo->a.i = b.i; 

或者更简单地说,你可以写

      newo->a = b;  

您遇到的其他问题是

1)您分配 number 节点两次,一次 withnew和一次 with malloc。只做一次,然后使用new.

2)该数字似乎是您list班级中未初始化的指针。这将使您的程序崩溃。list为将 number 初始化为 NULL编写一个构造函数。

3) 的逻辑list::add是错误的,即使 number 为 NULL,那么您要做的第一件事就是number->next这也会使您的程序崩溃。

4)名字到处都是(正如其他人指出的那样)。尝试为所有内容取个好名字,它会帮助你理解你自己的代码。

于 2012-11-06T16:17:36.027 回答
0

在 list.h 中更改成员编号(我猜这是您列表的开头编号 *head;

该功能Add没有意义。我会这样做:

void list::add(complex b)
{
        number *newo = new number;        
        newo->a::r = b.r;  
        newo->a::i = b.i; 
        newo->next = NULL;                

        if(!head)
        {
            //first item
            head = newo;
        }
        else
        {
            number *itr = head;
            while (itr->next != NULL)         
            { 
                itr = itr->next;
            }
            itr->next = newo;
        }
}
于 2012-11-06T16:21:24.707 回答