Нужна помощь новичка с синтаксисом C ++ - PullRequest
1 голос
/ 19 августа 2010

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

Я получаю сообщение об ошибке "Неверное преобразование из nodeType, инициализация аргумента 1 void connectedListType :: deleteNode (const Type &) [with 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);

Пожалуйста, помогите?

Ответы [ 4 ]

4 голосов
/ 20 августа 2010

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

current->link

имеет тип

nodeType<Type>*

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

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

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

const Type&

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

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

1 голос
/ 20 августа 2010

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

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

Также есть проблема с вашим циклом while. current может быть NULL, и в этом случае вызов deletetenode будет иметь катастрофические последствия.

0 голосов
/ 20 августа 2010

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

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

0 голосов
/ 20 августа 2010

deleteNode принимает константный тип &.Вы передаете его nodeType *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...