2017-06-21 10 views
1

ここで私の問題は、私はグラフデータベースを作成したいと思います。私のコンセプトアイディアは、ノード内のパスのリスト(l_est)と(int)id、char(char *)文字列(str)アウト。 リストは、ノードへのポインタの「アレイ」、リスト内のノードの量、およびノー​​ドの最大数が含まれています。構造体でクロスポインターを作成する方法

typedef struct Vrtc 
{ 
    int id; 
    char *str; 
    l_est *pathsIn; 
    l_est *pathsOut; 
} Vrtc; 

typedef struct l_est{ 
    Vrtc **Vert; 
    int qtdElem; 
    int maxElem; 
} l_est; 

あなたが知っているかもしれませんが、問題があるでしょう「ノード内で宣言されていないタイプ/タイプUnknow私はそれが可能であれば誰でも、それを行う方法のヒントを与えることができる期待していた

+0

私のヒント:google "C forward declaration"これはここで必要なものです:第1行目に 'struct l_est;'を挿入し、 'struct Vrtc'に' struct l_est * pathsIn、pathsOut; 'を使います。 – Scheff

+0

タイトルを「定義する前に構造体を使用する方法」または「構造体でクロスポインタを作成する方法」に変更します。 Btw。私は見つけました:[SO:Cで相互参照する構造体](https://stackoverflow.com/questions/20341335/cross-referencing-structs-in-c) – Scheff

+0

[Cで相互参照する構造体]の複製があります(https://stackoverflow.com/questions/20341335/cross-referencing-structs-in-c) – Scheff

答えて

0

あなたはforward declarationを使用する必要があります。。

typedef struct l_est l_est; 

typedef struct { 
    int id; 
    char *str; 
    l_est *pathsIn, *pathsOut; 
} Vrtc; 

typedef struct l_est { 
    Vrtc **Vert; 
    int qtdElem, maxElem; 
} l_est; 

struct l_estの最初の型定義は、いわゆる「不完全型」です。このタイプは、が変数に使用されていないか、またはsizeofで使用されている可能性がありますが、がポインタの宣言に使用されます。

不完全な型は、後でコンパイラの不満なく「完全型」によって上書きされる可能性があります。

類似の解決策は、他の言語(例:パスカル)で見つけることができます。

関連する問題