creating an array of structs in c++

后端 未结 4 1328
谎友^
谎友^ 2021-01-31 18:21

I\'m trying to create an array of structs. Is the code below valid? I keep getting an expected primary-expression before \'{\' token error.

int main         


        
相关标签:
4条回答
  • 2021-01-31 18:31

    Try this:

    Customer customerRecords[2] = {{25, "Bob Jones"},
                                   {26, "Jim Smith"}};
    
    0 讨论(0)
  • 2021-01-31 18:35

    Some compilers support compound literals as an extention, allowing this construct:

    Customer customerRecords[2];
    customerRecords[0] = (Customer){25, "Bob Jones"};
    customerRecords[1] = (Customer){26, "Jim Smith"};
    

    But it's rather unportable.

    0 讨论(0)
  • 2021-01-31 18:45

    You can't use an initialization-list for a struct after it's been initialized. You've already default-initialized the two Customer structs when you declared the array customerRecords. Therefore you're going to have either use member-access syntax to set the value of the non-static data members, initialize the structs using a list of initialization lists when you declare the array itself, or you can create a constructor for your struct and use the default operator= member function to initialize the array members.

    So either of the following could work:

    Customer customerRecords[2];
    customerRecords[0].uid = 25;
    customerRecords[0].name = "Bob Jones";
    customerRecords[1].uid = 25;
    customerRecords[1].namem = "Jim Smith";
    

    Or if you defined a constructor for your struct like:

    Customer::Customer(int id, string input_name): uid(id), name(input_name) {}
    

    You could then do:

    Customer customerRecords[2];
    customerRecords[0] = Customer(25, "Bob Jones");
    customerRecords[1] = Customer(26, "Jim Smith");
    

    Or you could do the sequence of initialization lists that Tuomas used in his answer. The reason his initialization-list syntax works is because you're actually initializing the Customer structs at the time of the declaration of the array, rather than allowing the structs to be default-initialized which takes place whenever you declare an aggregate data-structure like an array.

    0 讨论(0)
  • 2021-01-31 18:53

    It works perfectly. I have gcc compiler C++11 ready. Try this and you'll see:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int pause;
    
        struct Customer
        {
               int uid;
               string name;
        };
    
        Customer customerRecords[2];
        customerRecords[0] = {25, "Bob Jones"};
        customerRecords[1] = {26, "Jim Smith"};
        cout << customerRecords[0].uid << " " << customerRecords[0].name << endl;
        cout << customerRecords[1].uid << " " << customerRecords[1].name << endl;
        cin >> pause;
    return 0;
    }
    
    0 讨论(0)
提交回复
热议问题