0

ファイル: element.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 が実行される場所)。

ファイルの関数の 1 つがparser.cアクセスする必要がありますElement。何らかの条件が適用される場合、への新しいポインターElementが作成され、ポインター属性の 1 つが埋められます。その後のいくつかの反復で、他の条件が適用される場合、別のポインター属性がテキストを取得します。次に、他の条件が満たされたときに、へのポインタをElement別のファイルの関数に渡す必要があります: output.c.

私の質問は、どのように、どこに電話すればよいかElementです。条件内でそれへのポインターを作成する場合、ifそれは自動変数です。関数が繰り返されるときは表示されません。

宣言できstaticますが、コンパイラはエラーを返しますerror: 'e' undeclared (first use in this function)。例: 反復 1 では、ポインターはifステートメントの 1 つの分岐で作成されます。イテレーション 2 では、 の別のブランチにifアクセスし、次のようなことを行いますe->etag = "a";

を宣言すると、 (最初の)extern Element * e;の 2 番目の分岐で同じエラーが発生します。ifelse if

ファイル output.c

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

ファイル parser.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;

Element を定義しません。コンパイラにその構造を伝えるだけです。1 つの要素が定義されていません。

持ってみてください

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 に答える