0

文件:元素.h

#ifndef ELEMENT_H
#define ELEMENT_H 

typedef struct Elem {
  char * itag;
  char * cont;
  char * etag;
  struct Elem * previous;
} Element;

void printElement ( Element * );
#endif /* ELEMENT_H */

我在 element.h 和 element.c 中声明并定义了一个结构Element(未显示,但在其中执行了 malloc)。

文件的功能之一parser.c应该是访问Element. 如果某些条件适用,Element则会创建一个新指针,并填充其中一个指针属性。之后的一些迭代,如果其他条件适用,另一个指针属性会得到一些文本。然后,当满足其他一些条件时,Element应该将指向的指针传递给另一个文件的函数:output.c.

我的问题是:我应该如何以及在哪里打电话Element。如果在条件内创建指向它的指针,则if它是那里的自动变量。迭代函数时不可见。

我可以声明它static,但编译器返回错误error: 'e' undeclared (first use in this function)if例如:在迭代 1 中,指针在语句的一个分支中创建;在迭代 2 中,访问了另一个分支,if我做了类似的事情e->etag = "a";

如果我声明,在(第一个)extern Element * e;的第二个分支中会出现相同的错误。ifelse if

文件输出.c

#include element.h
write_element ( Element * e )
{
    write_to_disk(... e->itag, e->etag);
}

文件解析器.c

#include "element.h"

# some other functions
void parser ( char * f, char * b )
{
    if ( something ) {
        /* Need to access externally defined Element type structure, but it should be visible in all `parser` function */
        Element * e;
        e->itag = ... realloc(...)
        ...

    } else if (..... ) {
        /* Should assume a pointer to Element is already created */
        e->etag = "a";

    } else if ( .... ) {
        /* Should assume a pointer to Element is already created */
        /* and itag, etag and cont have some text */
        write_element( e );
    }
4

2 回答 2

1

编码

typedef struct Elem {
  char * itag;
  char * cont;
  char * etag;
  struct Elem * previous;
} Element;

没有定义元素。它只告诉编译器它的结构。没有一个元素被定义。

尝试拥有

extern Element myElement;

在头文件中。

在对应的.c文件中放

Element myElement;

这将保留空间myElement

于 2012-04-26T13:09:12.423 回答
1

您应该使用关键字« extern »。例如 :

fh :

#ifndef H_LP_F_20120426154230   
#define H_LP_F_20120426154230 

typedef struct Elem {
    char *itag;
    char *cont;
    char *etag;
    struct Elem *previous;
} Element;

extern Element myStruct;

#endif

fc

#include "f.h"

Element myStruct;
/* nom I can use myStruct */
于 2012-04-26T13:45:09.963 回答