在c ++中创建一个结构数组

17 c++ arrays data-structures

我正在尝试创建一个结构数组.以下代码是否有效?我一直收到expected primary-expression before '{'令牌错误.

int main() {
  int pause;
  struct Customer {
    int uid;
    string name;
  };

  Customer customerRecords[2];
  customerRecords[0] = {25, "Bob Jones"};
  customerRecords[1] = {26, "Jim Smith"};
  cin >> pause;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Tuo*_*nen 47

试试这个:

Customer customerRecords[2] = {{25, "Bob Jones"},
                               {26, "Jim Smith"}};
Run Code Online (Sandbox Code Playgroud)


Jas*_*son 26

在初始化struct之后,您不能使用初始化列表.Customer在声明数组时,您已经默认初始化了两个结构customerRecords.因此你将不得不要么使用成员访问语法来设置非静态数据成员的值,当你声明数组初始化自身使用初始化列表清单的结构,也可以为你的结构创建一个构造并使用默认operator=成员函数初始化数组成员.

因此,以下任何一种都可以工作:

Customer customerRecords[2];
customerRecords[0].uid = 25;
customerRecords[0].name = "Bob Jones";
customerRecords[1].uid = 25;
customerRecords[1].namem = "Jim Smith";
Run Code Online (Sandbox Code Playgroud)

或者,如果您为结构定义了一个构造函数,例如:

Customer::Customer(int id, string input_name): uid(id), name(input_name) {}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

Customer customerRecords[2];
customerRecords[0] = Customer(25, "Bob Jones");
customerRecords[1] = Customer(26, "Jim Smith");
Run Code Online (Sandbox Code Playgroud)

或者你可以做Tuomas在他的回答中使用的初始化列表序列.他的初始化列表语法工作的原因是因为你实际上初始化Customer的数组的声明的时间结构,而不是让结构是默认初始化这需要每当你声明的总数据结构就像一个地方阵列.


Dav*_*ave 8

一些编译器支持复合文字作为扩展,允许这个结构:

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

但这是相当不可取的.


小智 6

它运作完美。我已经准备好gcc编译器C ++ 11。试试看,您会看到:

#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;
}
Run Code Online (Sandbox Code Playgroud)