2010-08-19 2 views
1

Я занят назначением, я получаю сообщение об ошибке от компилятора. У меня есть 4 года опыта работы C# в C++.Необходима помощь для начинающих с синтаксисом C++

Я получаю сообщение об ошибке "Invalid преобразование NODETYPE, инициализирует аргумент 1 пустот linkedListType :: deleteNode (Тип конструкции &) [с Type = INT]" на линии deleteNode(current->link); этой функции:

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

'deleteNode()' определяется как 'const Type &', но вы вызываете его с аргументом 'current-> link', который имеет тип' nodeType * '. Это несовместимые типы. –

+0

Спасибо за редактирование. Не знал о домашнем теге. – callisto

+0

Нет проблем!Вы добавили его в духе, когда сказали, что это задание. – John

ответ

4

Ну, проблема довольно проста. Это:

current->link 

определяется иметь тип

nodeType<Type>* 

Но эта функция, которую вы пытаетесь передать его

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

принимает аргумент типа

const Type& 

С nodeType<Type>* нет на всех то же, что и const Type&, эта функция не может принять этот параметр.

Не видя остальной части вашего кода, трудно сделать вывод о том, что вы хотели сделать, но я думаю, что на основе его имени функция deleteNode должна принимать узел (то есть nodeType<Type>*), а не часть данных, содержащуюся узлом.

+0

Спасибо. Я переместил тело deleteNode в deleteNodePostion. – callisto

0

deleteNode принимает значение const Тип &. Вы передаете ему nodeType *.

0

current->link имеет тип nodeType<Type> *, но deleteNode ожидает аргумент типа Type &.

Учитывая имя (т. Е. Вы удаляете узел ) Я бы предположил, что подпись deleteNode необходимо изменить.

1

Вашего метод deletenode должен иметь следующую подпись:

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

Кроме того, существует проблема с циклом. ток может быть NULL, в этом случае вызов deletenode будет катастрофическим.

Смежные вопросы