Возвращение указателя из класса
-
10-07-2019 - |
Вопрос
Для моего класса программирования я должен написать класс связанного списка. Одна из функций, которую мы должны включить, - 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 * вместо ошибок компилятора. Любая помощь очень ценится.
Решение
Set *
правильно. Вы страдаете от довольно глупой ошибки в этой функции:
Set* Set::next() {
Set *current;
current = this;
return current->next;
}
Последняя строка должна быть return current-> nextval
. В противном случае вы пытаетесь вернуть указатель на функцию next
... вероятно, не то, что вы хотите, никогда. : -)
Другие советы
luqui правильный, хотя ваша функция next слишком сложна, нет причины копировать указатель this , это просто глупо. Используйте это вместо:
Set* Set::next() {
return nextval;
}