Main関数では次のコードを使用する必要がありますが、どのように使用するのかわかりません。
struct SomeItem
{
enum {MOVIE, MUSIC} itemType;
union {
struct Movie* movie;
struct Music* music;
};
};
この構造体は、previous/item/nextポインターを持つ動的リンクリストで使用されますが、列挙型を設定する方法がわかりません。またはそれを初期化する方法。
Main-functionでどのように表示されるかを知る必要があります。
biglist.someitem = ???;
/* declaration I use */
struct Library* biglist;
imがやろうとしていることを理解するためのより多くのコード。
struct Library{
struct SomeItem* someitem;
struct SomeItem* previousItem;
struct SomeItem* nextItem;
};
コンパイラエラー:C2037:「someitem」の左側に未定義の構造体/ユニオン「ライブラリ」が指定されていますC2065:MOVIE:宣言されていない識別子
私はまだANSICの新人なので、私を撃ってはいけません;)
どこでもポインタを使用しているので、アイテムを参照するには->を使用する必要があります。
すなわち。 biglist->someitem->itemType = MOVIE;
以下のコードは、gcc -Wall-strictで正常にコンパイルされます。
struct SomeItem
{
enum {MOVIE, MUSIC} itemType;
union {
struct Movie* movie;
struct Music* music;
} item;
};
struct Library{
struct SomeItem* someitem;
struct SomeItem* previousItem;
struct SomeItem* nextItem;
};
int main(void)
{
struct Library* biglist;
biglist->someitem->itemType = MOVIE;
return 0;
}
(もちろん、このコードは実行されませんが、biglistとsomeitemにメモリを割り当てていないためです!)
biglist.someitem.itemType = MOVIE; /* or = MUSIC */
または、someitem
がポインタの場合、
biglist.someitem->itemType = MOVIE; /* or = MUSIC */
struct SomeItem
{
enum {MOVIE, MUSIC} itemType;
union {
struct Movie* movie;
struct Music* music;
} item;
struct SomeItem *next;
};
このように列挙型を初期化できますbiglist-> someitem = MOVIE;ただし、コンパイラは0から始まる整数値を割り当てます。したがって、biglist-> someitem = MOVIEは0を返すか、biglist-> someitem = MUSICは1を返します。
それが何か良いことをするかどうかチェックしてください、