私はヘッダ構造体を持つ二重リンクリストを使用しようとしています。ヘッダー構造体は、リスト内に作成された構造体の数と最初と最後のノードを保持すると考えられます。今私は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;
}
私はこの問題を理解していません。 'slist'はすでに' sentry'へのポインタを含んでいるので、 'next'ポインタを使って残りのエントリに接続するのを止めますか? – merlin2011
申し訳ありませんが、私は指定する必要があります。 n> list = list-> lastの行。互換性のない型にはエラーがあります。そして、私は名前とグレードの割り当てがプログラムをクラッシュさせるか、出力がその原因になると思います。 –
あなたの監視隊の中で、ダイナミックメモリを使って**スタッド**をインスタンス化することは決してありません。主な機能では、前に: n-> student-> name = "test"; n-> student-> grade = 'A'; あなたは、** - > student = new stud; ** と言う必要があります。次に、次の2つのステートメントで名前と成績を割り当てることができます。 – 0xDEFACED