0

mysh.cppファイルに含まれて使用されるように、二重にリンクされたリストに少しのコードを適合させようとしています。

error: aggregate ‘linked_list list’ has incomplete type and cannot be defined

コンパイル時。readcommand.cppは問題なくコンパイルされるので、myshでスムーズに実行するには、ヘッダーファイルまたはcppファイルのいずれかで何を変更する必要があるかを理解しようとしています。

使用されるファイルの関連部分は次のとおりです。

mysh.cpp

#include "readcommand.h"

using namespace std;

int main (int argc, char** argv) {
  readcommand read;
  linked_list list; // THIS is the line that's causing the error

  ...
}

readcommand.h

#ifndef READCOMMAND_H
#define READCOMMAND_H

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>

class readcommand {

  public:

  // Struct Definitions
  typedef struct node node_t;
  typedef struct linked_list linked_list_t;

  struct node;
  struct linked_list;

...
};

#endif

readcommand.cpp

#include "readcommand.h"

using namespace std;

struct node {
  const char *word;
  node *prev;
  node *next;
};

struct linked_list {
  node *first;
  node *last;
};

...

私がC++、または一般的な言語でヘッダーを使用してからしばらく経ちました。問題の行を次のように変更してみました

read.linked_list list;

read.linked_list list = new linked_list;

などですが、エラーが次のようなものに変わるだけです。

error: ‘class readcommand’ has no member named ‘linked_list’

error: invalid use of ‘struct readcommand::linked_list’

よろしくお願いします。

4

4 に答える 4

1

あなたはこれらを置く必要があります...

struct node {
  const char *word;
  node *prev;
  node *next;
};

struct linked_list {
  node *first;
  node *last;
};

...で使用されるにコンパイラがそれらを見る場所class readcommandおそらく最も簡単な方法は、それらをの前 にreadcommand.hに配置することclass readcommandです。問題は、とがで使用されていることnodeですが、コンパイラはコンパイルのその時点でそれらが何であるかを認識していません。linked_listclass readcommand

于 2013-02-24T07:33:03.987 に答える
0

構造体/クラス定義(宣言だけでなく)は、次の場合に表示される必要があります。

  1. その構造体/クラスへのポインタを間接参照します
  2. その構造体/クラスのオブジェクトを作成します

コンパイラは、オブジェクトのサイズとそのフィールドの場所を知る必要があります。

そのため、nodeとlinked_listの定義を.hファイルに入れたい場合があります。通常、.cppには、メンバー関数の定義のみを入れます。

于 2013-02-24T07:31:16.950 に答える
0

cppファイルにの定義があり linked_listます...したがって、.hファイルを含めると、コンパイラはその構造体の定義を認識しません。

構造体の定義をヘッダーファイルに移動します。

于 2013-02-24T07:31:33.100 に答える
0

readcommend.hで

linked_listはクラスreadcommandのメンバーであり、readcommandオブジェクトを介してアクセスするか、readcommand.cppの場合はlinked_listをreadcommand.hに移動して、コンパイラーが「それが何であるか」を認識できるようにすることができます。

于 2013-02-24T07:33:54.483 に答える