0

dict_obj という名前の Dictionary_object 構造体を 2 つの個別の .c ファイルで使用できるようにしようとしています。これは、クラスの pthread TCP サーバーを作成しようとしているときです。私はこれまで C をあまり扱ったことがなく、これを理解するのに苦労しています。これを外部構造として正しく宣言しているかどうかはわかりません。これは、netbeans が未定義の型の無効な使用を示すクリーンおよびビルド時にエラーをスローしているためです。

db_functions.c には次のものがあります。

//------------------------------------------------------------------------------
//                Server Function & Variable Initialization 
//------------------------------------------------------------------------------

struct dictionary_object dict_obj;


//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//                            Server Function Codes:
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------



//------------------------------------------------------------------------------
//                         Database Initialization
//------------------------------------------------------------------------------

int db_initialization()
{

    dict_obj.word_count = 0;
    return 1;

db_operations.c には次のものがあります。

struct dictionary_object
{
    char dictionary[DICTIONARY_SIZE][WORD_LENGTH];
    int word_count;
    pthread_mutex_t dict_mutex;

};

extern struct dictionary_object dict_obj;

うまくいけば、多くのコードで圧倒されることなく、私が達成しようとしていることを十分に理解していただけると思います。前もって感謝します!コードをもっと見る必要がある場合はお知らせください。

4

2 に答える 2

1

インクルード ファイルで、構造の内容とレイアウトを 1 回定義する必要があります。また、すべての関数の「extern」定義とコードの静的を定義します。これらの構造体または定義を使用するファイルには、ヘッダー ファイル (db_struct.h など) を含めます。

db_struct.h:

struct dictionary_obhect {
   char dictionary ...
}
extern struct dictionary_object dict_obj;
extern int db_initialization();

db_struct.c:

#include "db_struct.h"

struct dictionary_object dict_obj;
int db_initiatilization() {
    dict_obc.word_count = 0;
}

これはすべてかなり古いスタイルの C コードであることに注意してください。最新の C++ などには、同様のことを行う他の手段があります。

于 2012-11-09T00:08:51.203 に答える
1

あなたの問題は、struct dictionary_objectdb_functions.c をコンパイルするときに、C コンパイラが a にメモリを割り当てる方法がわからないという不平を言うことだと思います。コンパイルするように要求しているファイルは、何が何であるかをまったく伝えていないため、その混乱は理解できますstruct dictionary_object

構造体の定義を、両方のファイルに含まれるヘッダー ファイル.cに移動する必要があります。

于 2012-11-09T00:07:29.947 に答える