2017-12-17 21 views
-4

私は私が作ったツリーフィールドから情報を取得しようとしています、と私はタイトルにエラーを取得していますへのポインタを参照解除:不完全な型へのポインタを参照解除はエラーC - 不完全な型

ツリーのソースファイル「List_tストラクト」を:

struct Node_t{ 
Element data; 
char* location; 
struct Node_t* son; 
struct Node_t* next; 
}; 
    struct List_t{ 
Node head; 
copyFunc copyfunc; 
compareFunc compfunc; 
freeFunc freefunc; 
printFunc printfunc; 
}; 

ツリーヘッダーファイル:

typedef struct Node_t* Node; 
typedef struct List_t* Tree; 
typedef void* Element; 

アプリのソース・ファイル:

Tree t; 
t = createTree(compareInt, copyInt , freeInt, printInt); 
int* x =(int*)malloc(sizeof(int)); 
*x=53; 
Add(t, x); 
char* location; 
location= t->head->location; //here I got the error 
printf(location); 

どうすればよいですか?私は何を間違えているのですか?

ありがとうございました!

+1

[ツアー]、とりわけ[尋ねる]を取る必要があります。 – Yunnosch

+0

実際のエラーメッセージを質問にコピーしていただきありがとうございます。今度は、必要なコードをすべて質問にコピーしてください。リンクをたどるのを単に拒否する有能で、通常役に立つ人がいます。したがって、スクリーンショットのショートカットを取ることで、良い答えを得るチャンスを減らしています。 – Yunnosch

+0

あなたのレビューに感謝@Yunnosch 私はそれを編集しました。今はそれが理にかなっていると考えています。 – MaorE

答えて

2

struct List_tの宣言は、ヘッダーファイル内にある必要があります。 createTreeの宣言と共に。

あなたは、コードの3枚を提供し、そして、それらを特定した
+0

ありがとうございます。それはすでに解消されています。多分それは別のものでしょうか? – MaorE

+0

@MaorEウィリアムによって言及されたタイプがエラーの時点ですでに宣言されていると思うなら、その行を特定してください。ツリーソースファイル内の行は答えではないことに注意してください。または、そうであってはならない - あなたはソースファイルを含めていないのですか?これは[mcve]でもっと簡単になります。 – Yunnosch

+0

コンパイラは構造体の宣言を見ません。それがエラーの意味です。それを見えるようにする必要がありますし、それを行う最も簡単な方法はヘッダーに追加することです。これがエクササイズの場合は、不透明な型を示すことが意図されているかもしれません。これは、内部構造体の内部をピークにするのではなく、提供されたAPIを使用することを意味します。 –

0

  1. ツリーソースファイル:

  2. ツリーヘッダーファイル:

  3. アプリのソースファイル:

これらのファイルをtree.c、その中

#include <stdio.h> 
#include "tree.h" 

:と

あなたはCソースファイルをコンパイルするapp.cは、一般的に次のような行が含まれていてもよい単一.cファイルを持っています。これは、コンパイラが別のファイルを見て、定義するために調べる方法です。

あなたapp.cファイルは、上記の行が含まれている場合は、app.c内部のコードはstdio.htree.hによって提供される情報を利用することができます。

特に、tree.c内に情報を入力した場合、その情報は#includeディレクティブが参照されていないため、app.cには表示されません。

ソリューションは、あなたのstruct定義とtypedef文とtree.hファイルに配置するパブリックインターフェイスの他の部分を移動するために(他の人が言ってきたように)です。

また、構造体のメンバーをプライベートにしたい場合は、データを返す関数を提供できます。もちろん、その関数の宣言がパブリックインターフェイスの一部になりますので、それは同様tree.hファイルにする必要があります(定義関数のtree.cにすることができますが、宣言は、公開されます)。

+0

@MaorE回答者が推測した仮定や仮定を説明するために、この回答が追加した努力に注意してください。あなたのコード引用と実際のMCVEとの違いは分かりますか? – Yunnosch

関連する問題