2016-11-18 6 views
0

構造体の順序のため、以下のコードはコンパイルできません。 song_node構造体は、プレイリスト変数とプレイリスト構造体は、song_node変数を持っています。Xcode C++ Struct Order

このコードはVisual Studioまたはgccコンパイルで実行されます。

struct song_node { 
    song* data; 
    song_node* next; 
    song_node* prev; 
    playlist* parent; 
}; 

struct playlist { 
    int songnumber; 
    char* name = new char[LNAME_LENGTH]; 
    song_node* head; 
    playlist* next; 
    playlist* prev; 
}; 

私はXcodeの新機能です。このコードの問題は何ですか?

+0

'song_node'の前に' struct playlist; 'フォワード宣言を追加すれば十分です。 –

答えて

1

は、クラスplaylistため前方宣言を考えてみましょう:

struct playlist; //Here 

struct song_node { 
    song* data; 
    song_node* next; 
    song_node* prev; 
    playlist* parent; 
}; 

struct playlist { 
    int songnumber; 
    char* name = new char[LNAME_LENGTH]; 
    song_node* head; 
    playlist* next; 
    playlist* prev; 
}; 

その後、コンパイラはおよそplaylistを知っているし、あなたは(まだ)それが実装されていないにもかかわらず、song_nodeでそれを使用することができます。

+0

別の方法がありますか?それはあなたに感謝しますが、私はなぜそれが他のプラットフォームで動作しているのだろうと思っていますが、ここにエラーがありますか? – lemonader

+0

あなたは他のプラットフォームについて話していますか? –

+0

Visual Studioまたはgccをコンパイルします。 – lemonader

1

フォワード宣言を行う必要があります。

struct playlist; 

struct song_node { 
    song* data; 
    song_node* next; 
    song_node* prev; 
    playlist* parent; 
}; 

struct playlist { 
    int songnumber; 
    char* name = new char[LNAME_LENGTH]; 
    song_node* head; 
    playlist* next; 
    playlist* prev; 
}; 

コンパイラは、あなたがsong_node以内にそれを使用したいときplaylistのようなものがあることを知っている必要があります。前方宣言プレイリストによって、そのようなオブジェクトが存在することをコンパイラーに伝えます。