2008-11-23 5 views
2

Для моего класса программирования я должен написать класс связанного списка. Одна из функций, которую мы должны включить, следующая(). Эта функция вернет адрес памяти следующего элемента в списке.Возврат указателя из класса

#include <iostream> 
using namespace std; 

class Set { 
    private: 
     int num; 
     Set *nextval; 
     bool empty; 
    public: 
     Set(); 
     <some return type> next(); 
}; 

<some return type> Set::next() { 
    Set *current; 
    current = this; 
    return current->next; 
} 

int main() { 
    Set a, *b, *c; 
    for (int i=50;i>=0;i=i-2) a.insert(i); // I've ommited since it does not pertain to my question 

    // Test the next_element() iterator 
    b = a.next(); 
    c = b->next(); 
    cout << "Third element of b = " << c->value() << endl; 

    return 0; 
} 

Как вы можете видеть, мне нужно установить указатель *b и *c на адрес памяти, который содержит следующий элемент в списке. Мой вопрос: какой тип возврата я бы использовал? Я попытался поставить Set и Set * вместо того, чтобы получить ошибки компилятора. Любая помощь приветствуется.

ответ

7

Set* правильный. Вы страдаете от довольно глупой ошибки в этой функции:

Set* Set::next() { 
    Set *current; 
    current = this; 
    return current->next; 
} 

Последняя строка должна быть return current->nextval. В противном случае вы пытаетесь вернуть указатель на функцию next ... возможно, не то, что вы хотите, когда-либо. :-)

6

luqui правильно, хотя ваш следующий функция является чрезмерно сложной, нет никаких причин, чтобы скопировать этот указатель, это просто глупо. Используйте это вместо:

Set* Set::next() { 
    return nextval; 
} 
Смежные вопросы