2012-04-18 24 views
1

これは基本的なC++です。私はリニアリンクリストであるクラスを持っています。私は2つの構造体を宣言したいと思います。それらのうちの1つはクライアントが使用するためのものです(つまり、クラスに渡す情報)。もう1つの構造体はリンク先リスト(これは「ノード」)を管理するための実装者です。すなわち:クライアント構造体と.hファイルの実装構造体

//this is the one for client use 
struct form { 
    char *name; 
    int age; 
    char *address; 
    //etc. 
}; 

struct node { 
    char *name; //same as in above but I am sorting the LL by this so I need it out 
    form *client_form; 
    node *next; 
}; 

私が混乱しているのは、これらを配置する場所です。クライアントがクラス定義の上で使用する構造体を配置するのが最善であると信じていますが、 "node"構造体を配置する場所はどこですか?これはプライベートにする必要がありますか?みんなありがとう!

+0

?あなたは、構造体内の変数のアクセス修飾子、またはどのファイルに定義を入れるべきかについて質問していますか? –

+1

* Aside *: 'name 'を' struct node'に複製する理由はありません。あなたがソートするときは 'note_ptr-> client_form-> name'を参照するだけです。 –

+0

あなたが尋ねていることは明確ではありません。一般的に私は、可能な限り小さな範囲でオブジェクトを定義し宣言することを好みます。ノードがリンクされたリストによって必要とされるのであれば、リンクされたリストクラスのプライベートオブジェクトまたはプロテクトされたオブジェクトである可能性があります... – AJG85

答えて

3

ノード構造は、単純に.cppファイルに配置できます。ヘッダーにノードを参照するものがある場合(例: "struct node * firstNode"とすると、 "struct node;"と言うだけでヘッダーの先頭近くで宣言する必要があります。

ので、.H:

struct node; 
struct form { 
    // form fields 
}; 

class MyStuff { 
    private: 
     struct node *firstNode; 
    // more Stuff 
}; 

た.cpp:私はそれはあなたが求めているが何であるかわからないんだけど

struct node { 
    // node fields 
}; 

MyStuff::MyStuff(struct form const& details) { 
    // code 
} 
+0

もし私がそれを好きなら、クライアントがノード構造のいずれかで得ることができません。私は "firstNode"がプライベートである限り、すべて安全だと思いますか?これは私が "私的な"ものに閉じ込められていないことを覚えているので気をつけているので、これはすべて起きました... – MCP

+0

そうです。たとえfirstNodeが誤って公開されたとしても、クライアントはノード構造自体が何であるかをまだ知りません。 –