2016-11-18 80 views
0

由于struct的顺序,下面给出的代码是不允许编译的。 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; 
}; 

编译器需要知道,有一些像playlist当你想内song_node使用它。通过向前声明播放列表,可以告诉编译器这样的对象存在。