2012-05-14 3 views
0

Я пытаюсь сделать функцию рекурсии, которая будет печатать все элементы в связанном списке назад.Печать значений из связанного списка с начальным значением в качестве значения по умолчанию в функции

Это функция, которую я сделал:

void lista::printBack(node *pocetak) { 
    if (pocetak==NULL) { 
     return ; 
    }  
    printBack(pocetak->sljedeci); 
    cout<<pocetak->podatak<<" "; 
} 

Теперь вопрос. Я хочу установить значение по умолчанию параметра pocetak, чтобы функция могла распечатать список без начального значения.

Но когда я делаю это:

void lista::printBack(node *pocetak = head) 
{ 
    if (pocetak==NULL) { 
     return ; 
    } 

    printBack(pocetak->sljedeci); 

    cout<<pocetak->podatak<<" "; 
} 

Я всегда получаю сообщение об ошибке: main.cpp: 17: 19: ошибка: нет подходящей функции для вызова 'Lista :: PrintBack()' main.cpp: 17: 19: примечание: кандидат: lista.h: 20: 10: note: void lista :: printBack (node ​​*) lista.h: 20: 10: note: кандидат ожидает 1 аргумент, 0 если

Является ли это любым способом, я могу это сделать? Спасибо.

+0

Вы сменили прототип? Аргумент по умолчанию должен идти только в прототипе. – chris

ответ

3

Вы должны указать аргумент по умолчанию в файле заголовка (реализация lista::printBack(node* pocetak=head) не хватает)

// lista.h 
struct node; 
node* head; 

struct lista 
{ 
    void printBack(node* pocetak=head); 
}; 

Обратите внимание, что это означает, что вы должны иметь действительный node* head объявлен до определен lista типа, лучший способ для которого - использовать форвардную декларацию (см. выше). Кроме того, head будет глобальной переменной, которая обычно не является хорошей идеей.

EDIT: фамилии фиксированного типа

+0

Спасибо за ваш быстрый ответ – depecheSoul

+0

Я обновил свой ответ, поняв, что 'printBack()' является членом 'lista', а не' node' – Attila