2016-11-14 10 views
0

誰かが私を助けることができますか?構造体と配列のイニシャライザが多すぎます

  • をあまりにも多くの初期化子と '日付'

の前

  • タイプ(S)これは、ヘッダファイルbook.h

    です:私は解決することができませんでした

    2つのエラー

    struct date 
    { 
    
        int date; >>>>the type(s preceding'date'),don't know what is this?? 
    
        int month; 
    
        int year; 
    }; 
    
    typedef struct { 
    
        char book_name[51]; 
    
        char book_ID[7]; 
    
        char author[31]; 
    
        char publisher[31]; 
    
        struct date book_date; 
    
        double price; 
    
    
    }BOOK; 
    

    これは私がチュートリアルの手順に従ってきましたが、それはまだそれはまだこれらの2個のエラーを持っている理由の誤差を、持っていることが表示されます.cppファイル

    void main() 
    
    { 
    
        int i; 
    
        BOOK bk_detail[10] ={ 
    
         {"Harry Potter","B1001","JK ROWLING","Little Brown",{30,6,1997},56.00}, 
    
         {"Me Before You","B1002","Jojo Moyer","Penguin Group",{3,6,2004},58.00}, 
    
         {"Game Of Throne","B1003","George RR Martin","Snow Dany",{4,4,1990},69.00}, 
    
         {"Maze Runner","B1004","James Dashner","Chicken Mouse",{3,3,2003},55.00}, 
    
         {"Papertown","B1005","John Green","Dutton Penguin",{16,8,2008},47.00}, 
    
         {"Twilight","B1006","Stephenie Meyer","Little Brown",{12,7,2005},56.00}, 
    
         {"The Hunger Game","B1007","Suzanne Collins","Scholastic Corporation",{3,9,2006},69.00}, 
    
         {"No Man Sky","B1008","Nathan Stuart","Littlefinger Group",{4,8,2014},55.00}, 
    
         {"Resist the Temptation","B1009","Jon Snow","The Night Watch",{8,9,1998},69.00}, 
    
         {"To Code","B1010","Daenerys Targaryen","Dragons BB",{5,3,1997},56.00} 
    
        }; 
        FILE*books_detail=fopen("book_detail.bin","wb"); 
        if (books_detail == NULL) 
        { 
         printf("ERROR...\n"); 
         exit(-1); 
        } 
    
        fwrite(&bk_detail,sizeof(bk_detail[0]),10,books_detail); 
    
        fclose(books_detail); 
    
    } 
    

    です。(PS、私はコーディングに新たなんです。 )

  • +0

    どのコンパイラ/ OSを使用しますか? (Linux上でgcc 5.4.1をインストールすると、不満なく受け入れられます)。 –

    +0

    @AdrianColomitchi:うん!それは楽しい。私はそれを見て、直ちに考えました - それは正しいことではありません....しかしhttp://cpp.sh/8xj4r。はい、私は何が起こっているのか分かりません! OP:[mcve]と* complete *エラーメッセージが必要です。 –

    +0

    @MartinBonner「OK、何が起こっているのかわかりません!」これは、デフォルトで生成されたコンストラクタで動作します。/anyコンストラクタを追加する瞬間ではありません。 –

    答えて

    2

    2番目のエラーは、最初のエラーの結果です。最初のエラーは、与えられたことである:date呼ば

    struct date { 
    

    部材は、コンストラクタ - であり、コンストラクタはタイプによって先行しすることができません。別の言い方をすれば、構造体やクラスと同じ名前のメンバ変数を持つことはできません。

    修正がそれを変更することです:

     int day_of_month; 
    

    編集

    // Example program 
    
    struct Foo 
    { 
        int Foo; 
    }; 
    
    int main() 
    { 
        Foo foo; 
        foo.Foo = 1; 
    
        return foo.Foo; 
    } 
    

    (同じ "問題" を持っている):そのcpp.sh除いては、と完全に満足しています。

    は、charの配列を使用するのではなく、全体でstd::stringを使用することをお勧めします。それは多くのコード多くのをより簡単にします。

    0

    問題は、構造体の名前が "date"で、メンバ変数が "date"ということです。コンパイラは同じ名前が付けられているため、エラーが発生します。あなたは

    int型のint型の種類を作った場合

    これについて考えるための簡単な方法です。

    intは型であるため、変数に型と同じ名前を付けることはできません。

    +1

    "これについて簡単に考えてみるには、' int int; '' Ummm ... '' date'がC++の予約語であるときから? –

    +0

    私はそれをより明確に編集しました。それが類似している理由は、それがタイプであるということです。私は予約語だとは言いませんでした。 – Stephen