c ++模板类成员函数,依赖于其他模板类

时间:2014-09-18 20:59:44

标签: c++ templates

我正在尝试创建一个链接列表类,它使用节点类作为列表中的节点(下一个节点,数据)。 Linked List类充当包含成员函数的列表的标题,并且可以与任何数据类型(即模板)一起使用。我很难理解模板在类声明和成员函数实现中的工作方式。

我有两个链表的模板类(这里是相关部分):

template<typename NodeObjectType>
class ListNode
{
public:
    NodeObjectType data;
    ListNode<NodeObjectType>* next;
    ListNode() : next(NULL){}
    ListNode(const NodeObjectType& item, ListNode<NodeObjectType>* nextNode = NULL)
    {
        data = item;
        next = nextNode;
    }
};

template<typename ObjectType>
class myList
{
public:
    myList()
    {
        Head = NULL;
    }

    // Other member Functions    ...


    bool contain(ObjectType x)
    {
        ListNode<ObjectType> *current = Head;
        while ( current != NULL )
        {
            if (current->data == x)
                return true;
            current = current->next ; // move forward one step
        }
        return false;
    }


    void add(ObjectType x)
    {
        if(!contain(x))
        {
            ListNode<ObjectType>* NewListNode(x , Head);
            Head = NewListNode;
        }
    }

private:
    ListNode<ObjectType>* Head;
};

编译时我收到错误

In instantiation of 'void myList<ObjectType>::add(ObjectType) [with ObjectType = int]':
required from here
error: expression list treated as compound expression in initializer [-fpermissive]

我是在做模板对象类型传递不正确还是其他的?谢谢

1 个答案:

答案 0 :(得分:2)

该行:

ListNode<ObjectType>* NewListNode(x , Head);

应该是:

ListNode<ObjectType>* NewListNode = new ListNode<ObjectType>(x , Head);
//                                ~~~~~~~~~~~~~~~~~~~~~~~~~^