2017-03-22 7 views
1

私はヘッダ構造体を持つ二重リンクリストを使用しようとしています。ヘッダー構造体は、リスト内に作成された構造体の数と最初と最後のノードを保持すると考えられます。今私は2つの問題を見る。 1つはヘッダ構造体を後続の構造体に接続し、2つ目はリストのノード(sentry)内にある入れ子構造体にアクセスしています。誰かが私が間違っているかもしれないことについて何らかの光を当てることができれば、それは大いに感謝されるでしょう。コードは以下のとおりです。二重リンクリスト内のネストされた構造体にはどうすればアクセスできますか?

#include <iostream> 
using namespace std; 
typedef struct sentry sentry; 

struct stud{ 
    string name; 
    char grade; 
}; 

struct slist { 
    int length; 
    sentry *first; 
    sentry *last; 
}; 

struct sentry { 
    slist *list; 
    sentry *next; 
    sentry *prev; 
    stud *student; 
}; 

int main(int argc, char** argv) { 
    slist list; 
    sentry *n; 

    n = new sentry; 

    // Full initialization of the header node. 
    list.first = n; 
    list.last = n; 
    list.length = 0; 

    n->prev = NULL; 
    n->next = NULL; 
    n->list = list->last; 
    n->student->name = "test"; 
    n->student->grade = 'A'; 

    cout << n->student->name << '\n'; 
    cout << n->student->grade << '\n'; 

    return 0; 
} 
+0

私はこの問題を理解していません。 'slist'はすでに' sentry'へのポインタを含んでいるので、 'next'ポインタを使って残りのエントリに接続するのを止めますか? – merlin2011

+0

申し訳ありませんが、私は指定する必要があります。 n> list = list-> lastの行。互換性のない型にはエラーがあります。そして、私は名前とグレードの割り当てがプログラムをクラッシュさせるか、出力がその原因になると思います。 –

+0

あなたの監視隊の中で、ダイナミックメモリを使って**スタッド**をインスタンス化することは決してありません。主な機能では、前に: n-> student-> name = "test"; n-> student-> grade = 'A'; あなたは、** - > student = new stud; ** と言う必要があります。次に、次の2つのステートメントで名前と成績を割り当てることができます。 – 0xDEFACED

答えて

1

slist *listを含まないようにあなたの構造体を変更しないでください。 なぜ双方向の関係sentryslistの間に必要なのはですか?それは保守リストの中の値を維持したり、読み込んだり更新したりするのが面倒です。念のため、ヒープ上のメモリを解放してメモリリークを避けるために。なぜslist(ヘッダー)にはsentryに関する情報しかありません。このようにして、sentryslistの間の二重結合の複雑さを解消します。

struct sentry { 
     sentry *next; 
     sentry *prev; 
     stud *student; 
}; 
+1

構造プロトタイプは教授によって私たちに与えられました。私は個人的にヘッダー構造体を持たないDLLを作成し、ヘッダー構造体を含むDLLよりも抽象的で管理が容易でなければなりません。あなたが言ったように、それは退屈なので、私は2つの方法の関係なしにそれを与えるだろうと思う。このように、私の理解では、ヘッダーは単にDLLの両端を含むサンドイッチとして機能します。 –

+0

@GabeClark、実際にあなたを助けてくれたら、答えを正しいものとしてマークできますか? – 0xDEFACED

+0

あなたはそれを持っています!私は今、私の3つの構造体のそれぞれにアクセスできます:D –

関連する問題