0

これがヘッダーファイルです

class sv1{
private:
  struct Node{
          string title;
          Node* next;
              };
public:
void InsertAfter(Node **head, string title);
void getMetadata(string t);
void q_folder(string t_q);

これがccファイルの状態です

void sv1::getMetadata(string t)
{
Node *head=NULL;
title=t;
q_folder(title);
}
void sv1::q-folder(string t_q)
{
InsertAfter(&head,t_q);
}
void sv1::insertAfter(Node **head,string title)
{
if (head==NULL)
{
Node* temp=NULL;
temp=new Node;
temp->title=title;
*head=temp;
}
else{
Node *temp= new Node;
temp= new Node;
temp->title=title;
temp->next=(*head)->next;
(*head)->=temp;

}
}

エラーは、ヘッドが関数q_folderで宣言されていないことを示しています。何が原因で、どうすれば解決できますか?

4

2 に答える 2

5

メソッド q-folder では、「&head」を指定して insertAfter を呼び出します。クラス メソッドで head を認識できる唯一の方法は、

  1. ローカル
  2. パラメータ
  3. クラス メンバー (継承またはその他)
  4. グローバル(ただし、これはノーノーと考えてください)

3 つのどれでもないことを見ると、「&head」が何を意味するのかわかりません。さらに、hmjd の訂正が述べたように、宣言されたメソッドはいずれも、そのクラスに属するものとしてラベル付けされていません。どのクラスからも独立した個別のメソッドであるかのように記述しました。それらがクラス sv1 に属していることを示すために、メソッド名の先頭に「sv1::」を追加する必要があります。

于 2012-09-07T07:59:56.813 に答える
0

間違ったパターンを追求していると思います。クラスのプライベート セクション内で Node 構造体を定義したのはなぜですか!? 通常のパターンでは、Node と LinkedList 自体のクラスを分離する必要があります。ノードをカプセル化する別のクラスを作成してください。また、テンプレートを使用して実装して、さまざまなデータ型をサポートすることもできます。

またhead、内部変数です。関数の引数として受け入れるべきではありません。リンクされたリスト (機能する場合) が一貫しておらず、すべての定義変数が変更可能であるため、これはオブジェクト指向ではありません。headLinkedList を非公開にする必要があります。ここでいくつかの例を見つけることができます:

単純な C/C++ リンク リスト

C/C++ を使用して連結リストを作成する方法

于 2012-09-07T08:41:19.397 に答える