2017-02-28 6 views
0

クラスのキューに入れられたリンクされたリストのために、mainの外側の構造体を定義したコードを書きました。それは基本的に次のように見えました:ヘッダーファイルとcppファイルを使用する場合の構造の定義方法は?

class Queue 
{ 
public: 
    void enqueue (int x); 
    void dequeue(); 
    void print(); 
}; 

struct queueNode 
{ 
    int data; 
    queueNode * next; 
    queueNode * prev; 
}; 

queueNode * head; 
queueNode * tail; 
queueNode * n; 

//class functions that use head, tail, and n 


int main() 
{ 

//functions that use head, tail, and n 

return 0; 
} 

これは非常に、非常に剥奪されたバージョンですが、あなたは画像を取得します。

問題は、別のファイルに分割するようになったため、ヘッド、テール、またはnをどこに配置するかわからないということです。

私はそれらをヘッダに入れても、それらは括弧で囲まれていないので、ヘッダファイルの末尾にすることはできません。

私はそれらを実装ファイルに入れても、メインにはアクセスできません。そして、再定義のため実装ファイルを#includeできません。

私はそれらをメインに置くと、実装ファイルにアクセスできません。

これらはどこに貼る必要がありますか?大会の種類はありますか?

+4

「キュー」に入れてはいけませんか? – tkausl

+2

返事をありがとう。彼らはキューにいる場合、メインの何もそれらを見ることができるようだ....編集:聖なるF、私はダムだ。あなたのコメントは、私が解決策を見ることを可能にしました。これは、主なものから任意の参照を取り出し、それを実装ファイルの関数に入れたものです。ありがとう! – FKAjasmine

答えて

1

私はそのようなだろう。

クラスの宣言と構造を - >ヘッダ(または別個のヘッダ)へ。ノード変数は外部から直接アクセスされないようにソースファイル(cまたはcpp)に置かれます。他のソースファイルにアクセスする必要がある場合は、この目的のためにget/set関数を提供することができます。また、インラインでない場合、ソースファイルにはクラスのメソッドの実装が必要です。

+0

うわー、私はばかです。これは正確にこれを解決する方法です、ありがとうございます! – FKAjasmine

-1

nest Queueクラスのノードクラス。Queueのtailメンバー、headメンバー、nメンバーを作成します。メインで

class Queue { 
public: 
    struct Node { 
    int data_; 
    Node * next_; 
    Node * prev_; 
    Node (const Node& n) : next_ (n.next_), prev_ (n.prev_){} 
    }; 
    void enqueue (int x); 
    void dequeue(); 
    void print(); 
    Node* n() const {return n_;} //read only 
    Node*& n() {return n_;}  //read and write 
private : 
    Node * head_; 
    Node * tail_; 
    Node * n_; 
}; 

、メンバーのテールにアクセスし、明確にキューイングすることが可能である、とキューについてのすべてを単一のファイルにある:あなたが

queueNode * head; 
queueNode * tail; 
queueNode * n; 

を持つようにしたい場合は

int main() { 
    //functions that use head, tail, and n 
    Queue queue; 
    Queue::Node *node (queue.n()); 
    return 0; 
} 
0

あなたの主な機能を通してアクセスするには、普通はヘッダーファイルの中に入れて、あなたが望む場所に含めるか(ヘッダーファイルをコピーするだけでそれを貼り付ける)、あなたのメインフーの上に宣言しますmain.cppファイルの中にあります。そのような単純な。

と言ったようなものですが、ヘッダファイル内に定義(クラス/構造体とメンバのアウトライン)を入れておくのが最適です。ソースファイル内の関数を抽出します。

通常、変数/オブジェクトを宣言するときは、複数の場所が必要な場合を除いて、必要な場所のすぐ隣に配置します。この場合、インクルードガードを含むヘッダーにスラップするだけです。 例:

main.cppに

#include "queue.h" 
#pragma once 

queueNode * head; 
queueNode * tail; 
queueNode * n; 

//class functions that use head, tail, and n 


int main() 
{ 

//functions that use head, tail, and n 

return 0; 
} 

queue.h

class Queue 
{ 
public: 
    void enqueue (int x); 
    void dequeue(); 
    void print(); 
}; 

struct queueNode 
{ 
    int data; 
    queueNode * next; 
    queueNode * prev; 
}; 

キュー。cpp

#include "queue.h" 
//queue and other methods should go here. 

ideを持たない複数のソースファイルをコンパイルする場合は、それらをリンクする必要があることを覚えておいてください。

+0

正直言って、私は聖者の答えがほとんど好きです。なぜそれが否定的なのか分かりません。あなたがグローバルな空間を汚染しないようにしたいのであれば、それらをいくらか公開しておきたいのなら、彼の方法が最良のアイデアかもしれません。 – user3440251

関連する問題