1

我已经获得了创建双向链表的代码。链表中的节点是一个名为ListItem的结构。现在在该节点内是一个为该节点分配值的函数。我遇到的问题是我似乎无法创建节点并使用该函数为其分配值。

这是结构“ ListItem ”的代码。

template <class T>
struct ListItem
{
    T value;
    ListItem<T> *next;
    ListItem<T> *prev;

    ListItem(T theVal)
    {
        this->value = theVal;
        this->next = NULL;
        this->prev = NULL;
    }
};

随附的 .cpp 文件中对应的ListItem函数:

template <class T>
ListItem<T>* List<T>::getHead()
{
}

template <class T>
ListItem<T>* List<T>::getTail()
{
}

template <class T>
ListItem<T> *List<T>::searchFor(T item)
{
}

这是我试图在我的主要功能中做的事情。

int main()
{
    ListItem<int> a;
    a.ListItem(int 5);
    system("PAUSE");
}

我在这里要做的就是创建一个节点并为其分配一个值。以下是我得到的错误:

= 'a' 不是类或命名空间

= '(' 标记之前缺少模板参数

= 'int' 之前的预期主表达式

4

2 回答 2

3

请记住, astruct与 a 相同class,因此您所做的是创建一个类,其名称ListItem包含一个带有单个参数的普通构造函数。

你像往常一样创建它:

ListItem<int> a(5);

您还有其他一些问题,例如具有未在类中声明的类的函数(例如getHead函数)。您也不能在单独的源文件中实现模板化函数成员,它们必须与类(或结构)定义一起在头文件中。

于 2013-02-07T07:23:34.430 回答
2

ListItem 不是函数名,而是类/结构的构造函数。构造函数是一个特殊的函数,不能这样调用。您的代码应如下所示:

int main()
{
    ListItem<int> a(5);
    system("PAUSE");
}
于 2013-02-07T07:24:54.430 回答