-1

我有单链表,我想在这个结构中添加一个新元素。


在程序代码中,我将创建结构和指向 NULL 的头指针。这就是我在oo代码中解决这个问题的方法:

typedef struct a {
    int element;
    struct a *next;
} a;
typedef struct b {
    int element;
    struct b *next;
} b;

class Foo {
    a *a; // head for a structure = NULL at the beginning
    b *b; // head for b structure = NULL at the beginning

接下来我要做的是检查列表是否为空,如果是,则将 head 设置为指向新创建的第一个元素。

执行此操作的函数应该是模板,因为我想将我拥有的任何结构传递给它。所以:

template <class T> void Addition_Struct::add(T head)
{
    if(head == NULL)
    {
        head = (T*)malloc(sizeof(T));

        head->next = NULL;
    }
}

此时出现了几个问题。我猜想 T 应该是结构的类型,并且指向头指针(当前为 NULL)。编译器在 malloc 行 - 中引发错误cannot convert "a**" to "a*"。怎么了?

编辑:

示例函数调用将是:

add(this->a);
4

1 回答 1

0

您混淆了T模板函数中的含义。

在您的示例调用add(this->a);中,您将参数视为指向结构的指针

但是您的函数head = (T*)malloc(sizeof(T));认为T是结构类型。不是指针。

更改您的模板声明以阐明指向T的类型。

template <class T> void Addition_Struct::add(T * head)
于 2013-04-14T19:38:59.247 回答