0

我试图在两个单独的 .c 文件中提供一个名为 dict_obj 的 dictionary_object 结构。这是在尝试为类编写 pthread TCP 服务器时。我以前没有用 C 做太多工作,并且很难弄清楚这一点。我不确定我是否正确地将其声明为外部结构,因为 netbeans 会在 clean 和 build 上抛出错误,说无效使用未定义类型。

在 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

struct dictionary_object我会冒昧地猜测您的问题是 C 编译器在编译 db_functions.c 时抱怨它不知道如何为 a 分配内存。它的混乱是可以理解的,因为您要求它编译的文件根本没有告诉它是什么struct dictionary_object

您应该将结构的定义移动到两个文件都包含的头文件.c中。

于 2012-11-09T00:07:29.947 回答
1

您需要在包含文件中定义一次结构内容和布局。还要为那里的代码定义所有函数和静态的“外部”定义。在任何想要使用这些结构或定义的文件中,包括头文件(类似于 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 回答