需要初学者帮助使用C ++语法

时间:2010-08-19 19:55:21

标签: c++ syntax

我正在忙于一项任务,我从编译器收到错误。我在C ++中有4年的C#经验nil。

我收到错误“nodeType的无效转换,在此函数的行deleteNode(current->link);上初始化void linkedListType :: deleteNode(const Type&amp;)[with Type = int]'”的参数1:< / p>

template<class Type>
void linkedListType<Type>::deleteNodePosition(int position)
{
    nodeType<Type> *current; //pointer to traverse the list
    nodeType<Type> *trailCurrent; //pointer just before current

    if(first == NULL)    //Case 1; list is empty. 
        cerr<<"Can not delete from an empty list.\n";
    else
    {
        current = first;
        int counter = 0;

        while(current != NULL && counter <= position)
            {               
                trailCurrent = current;
                current = current->link;
                counter++;
            } // end while
        deleteNode(current->link);
    }

deleteNode定义为:

template<class Type>
void linkedListType<Type>::deleteNode(const Type& deleteItem)
{
    .....

和nodeType定义为:

struct nodeType
{
    Type info;
    nodeType<Type> *link;
};

我用这个来调用违规函数:

linkedListType<int> llist;
llist.insertFirst(99);
llist.insertLast(94);
llist.deleteNodePosition(2);

请帮帮忙?

4 个答案:

答案 0 :(得分:4)

嗯,问题非常简单。这样:

current->link

定义为类型

nodeType<Type>*

但是这个函数是你试图将它传递给

void linkedListType<Type>::deleteNode(const Type& deleteItem)

接受

类型的参数
const Type&

由于nodeType<Type>*const Type&完全不同,因此该函数无法接受该参数。

如果没有看到你的其余代码,很难推断出你的意图,但我认为基于它的名称,deleteNode函数应该接受一个节点(即nodeType<Type>*)而不是节点包含的一段数据。

答案 1 :(得分:1)

您的deletenode方法应具有以下签名:

template<class Type>
void linkedListType<Type>::deleteNode(const nodeType<Type>& deleteItem)

此外,您的while循环存在问题。当前可能为NULL,在这种情况下调用deletenode将是灾难性的。

答案 2 :(得分:0)

deleteNode采用const Type&amp ;.您传递的是nodeType *。

答案 3 :(得分:0)

current->link的类型为nodeType<Type> *,但deleteNode期望参数类型为Type &

鉴于名称(即您正在删除节点),我认为deleteNode的签名需要更改。