61

タイトルが示すように、私はこのコードを持っています:

    typedef struct Book{
        int id;
        char title[256];
        char summary[2048];
        int numberOfAuthors;
        struct Author *authors;
    };


    typedef struct Author{
        char firstName[56];
        char lastName[56];
    };


    typedef struct Books{
        struct Book *arr;
        int numberOfBooks;
    };

gcc から次のエラーが表示されます。

bookstore.c:8:2: error: unknown type name ‘Author’
bookstore.c:9:1: warning: useless storage class specifier in empty declaration [enabled by default]
bookstore.c:15:1: warning: useless storage class specifier in empty declaration [enabled by default]
bookstore.c:21:2: error: unknown type name ‘Book’
bookstore.c:23:1: warning: useless storage class specifier in empty declaration [enabled by default]

次のように typedef を変更しても、警告もエラーも発生しません。

    typedef struct{
        char firstName[56];
        char lastName[56];
    } Author;

C プログラミング言語、第 2 版を検索し、数時間グーグルで検索した結果、最初の実装が機能しない理由がわかりません。

4

6 に答える 6

7

構文は次のとおりですtypedef

typedef old_type new_type

最初の試行では、型ではなくstruct Book型を定義しました。つまり、あなたのデータ型は呼び出され、 ではありません。 Bookstruct BookBook

2 番目の形式では、 の正しい構文を使用したtypedefため、コンパイラは という型を認識しBookます。

于 2013-07-18T10:09:42.333 に答える
0

Book を定義する前に Author を定義するだけです。

Author in Book を使用するため、事前に定義する必要があります。

于 2013-07-18T10:07:47.060 に答える
0

理解の助けになると思います。 http://www.tutorialspoint.com/cprogramming/c_typedef.htm

bookstore.c:8:2: error: unknown type name ‘Author’
bookstore.c:21:2: error: unknown type name ‘Book’

これらは、使用する前に定義する必要があるために生成されます。構造体 "Author" & "Books" を構造体 "Book" の上に移動します。これで解決します。

また、あなたが得ている警告は、問題がある理由を説明しています。コンパイラは、構造体を適切に型定義していないため、「typedef struct Author」を不要として識別し、コンパイラが「読み取る」のに役立つものは何もありません。

あなたはすでに答えがこの形であるべきだと知っているので

typedef struct {
 ...
 ... 
 ...
} struct-name;

それに固執します。

于 2013-07-18T10:12:51.380 に答える