Возвращение указателя из класса - PullRequest
2 голосов
/ 23 ноября 2008

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

#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 * вместо ошибок компилятора. Любая помощь с благодарностью.

Ответы [ 2 ]

7 голосов
/ 23 ноября 2008

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

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

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

6 голосов
/ 23 ноября 2008

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

Set* Set::next() {
    return nextval;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...