2

私のプログラミング クラスでは、リンク リスト クラスを作成する必要があります。含めなければならない関数の 1 つに 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* を代わりに配置しようとしましたが、コンパイラ エラーが発生します。どんな助けでも大歓迎です。

4

2 に答える 2

7

Set*正しい。あなたはこの関数のかなりばかげたバグに苦しんでいます:

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

最後の行はreturn current->nextval. それ以外の場合は、関数へのポインターを返そうとしていnextます...おそらく、あなたが望むものではありません。:-)

于 2008-11-23T08:07:27.730 に答える
6

luqui は正しいです。次の関数は非常に複雑ですが、 thisポインターをコピーする理由はありません。それはばかげています。代わりにこれを使用してください:

Set* Set::next() {
    return nextval;
}
于 2008-11-23T08:12:59.777 に答える