Я новичок в c++, и я хочу создать и создать массив из ниже структуры. Любая помощь пожалуйста! благодаря
struct contact{
string name;
string address;
string phone;
string email;
contact(string n, string a, string p, string e);
};
Проблема заключается в том, что вы пытаетесь создать экземпляр массива 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", "[email protected]"};
и создавать экземпляры массивов по-прежнему:
contact contactsA[42];
std::array<contacts, 42> contactsB;
В 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];
#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", "[email protected]"}
};
std::array
, вероятно, будет barf, потому что у contact
нет конструктора по умолчанию.