我正在忙于一项任务,我从编译器收到错误。我在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);
请帮帮忙?
答案 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
的签名需要更改。