0

我是 C++ 新手,我想创建以下结构的数组。请提供任何帮助!谢谢

struct contact{
    string name;
    string address;
    string phone;
    string email;
    contact(string n, string a, string p, string e);
    };
4

3 回答 3

3

问题似乎是你试图实例化一个contact对象数组,但是这个类没有默认构造函数,因为你添加了一个非默认的用户定义构造函数。这将删除编译器生成的默认构造函数。要取回它,您可以使用default

struct contact{
  string name;
  string address;
  string phone;
  string email;
  contact() = default; // HERE
  contact(string n, string a, string p, string e);
};

这使您可以执行以下操作:

contact contactsA[42];
std::array<contacts, 42> contactsB;

编辑:考虑到您的类型的简单性,另一种解决方案是删除用户定义的构造函数。这将使类型成为聚合,这将允许您使用聚合初始化,并且您无需采取任何特殊操作来启用默认构造:

struct contact
{
  string name;
  string address;
  string phone;
  string email;
};

现在您可以使用聚合初始化:

contact c{"John", "Doe", "0123-456-78-90", "j.doe@yoyodyne.com"};

并像以前一样实例化数组:

contact contactsA[42];
std::array<contacts, 42> contactsB;
于 2013-10-13T16:22:40.560 回答
1

在 C++ 中,如果您创建一个没有任何构造函数的类,编译器将为您创建一个普通的默认构造函数——即不带参数的构造函数。由于您创建了非默认构造函数,编译器不会为您生成默认构造函数。您通常会使用以下内容创建一个“联系人”类型的数组:

contact my_array[10];

这将在每个成员上调用联系人的默认构造函数。由于没有默认构造函数,您可能会看到编译失败。

我建议添加一个默认构造函数。您的新结构可能如下所示:

struct contact{
  string name;
  string address;
  string phone;
  string email;
  contact();  // This is your default constructor
  contact(string n, string a, string p, string e);
};

完成此操作后,您现在应该能够使用以下内容创建数组:

contact my_array[10];
于 2013-10-13T16:09:29.003 回答
0
#include <vector>
#include <array>
#include <string>

using std::string;

struct contact{
  string name;
  string address;
  string phone;
  string email;
  contact(string n, string a, string p, string e);
};

std::vector<contact> contacts1;      // for an array without a size known at compile time.
std::array<contact, 1> contacts2 = { // for an array with a known and static size.
  contact{ "Bob Smith", "42 Emesgate Lane, Silverdale, Carnforth, Lancashire LA5 0RF, UK", "01254 453873", "bob@example.com"}
};
于 2013-10-13T15:49:12.973 回答