我正在尝试编写动态链接的复数列表。基本上:我有一个类list
,其中包含一个包含类number
的结构complex
。框中的框中的框。我有引用复数本身的问题(我只有添加节点的函数。到目前为止我的代码:
class complex
{
public:
float r;
float i;
};
#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();
};
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;
}
感谢您的帮助;)
答案 0 :(得分: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)您将数字节点分配两次,一次使用new
,一次使用malloc
。只需执行一次,然后使用new
。
2)这个数字似乎是list
课程中未初始化的指针。这会让你的程序崩溃。编写list
的构造函数,将number初始化为NULL。
3)list::add
的逻辑错误,即使number为NULL,你做的第一件事就是number->next
,这也会导致程序崩溃。
4)名称遍布各地(正如其他人所指出的那样)。尝试为所有内容选择好名字,它将帮助您了解自己的代码。
答案 1 :(得分:0)
在list.h中更改成员编号(我想这是列表的开头。) 号码*头;
函数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;
}
}