Подскажите пожалуйста, как можно добавить объект в valarray.
Есть valarray
valarray<Inspector> InspectorData;
Пытаюсь добавить таким способом:
InspectorData.operator+= (Inspector(chNameDep, chTown, chRegion, chStreet, iBuilding, chNameInsp, chSurnameInsp, chPatronymicInsp, chPosition, chRank, iAge));
Но получаю ошибку.
C2676 бинарный "+=": "Inspector" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору.
Подскажите пожалуйста, как добавить элемент.
Заранее благодарен за помощь.
Вы конечно можете создать обьект valarray<Inspector>, но:
Inspector не имеет аргументы по умолчанию:Вы должны сразу обозначить эти аргументы и количество:
valarray<Inspector> inspactorData(Inspector(arg1, arg2,...), 10);
тогда вы получаете inspactorData с 10 обьектами Inspector(arg1, arg2,...), которые потом можете заменить другими.
вы можете создать обьект
valarray<Inspector> inspactorData;
но потом придется установить размер(сколько обьектов предположительно будет содержать)
inspactorData.resize(10);
inspactorData[0] = Inspector(chNameDep, chTown, chRegion, chStreet, iBuilding, chNameInsp,
chSurnameInsp, chPatronymicInsp, chPosition, chRank, iAge);
Так можете заполнять каждый элемент объекта valarray. Все его операторы приводят к вызову операторов элементов valarray. Так что ваши попытки добавлять с помощью оператора + приводят к тому, что вы суммируете содержащийся в последовательности все обьекты с другим обьектом, что во первых не то, что вы ожидаете, а во вторых ваш класс может не иметь определение operator+
Но valarray оптимизирован для численных методов, для других целей использовать его просто нежелательно, а иногда даже приведет к тупику. Так что конкретно для вашего класса, лучше используйте контейнеры ( "не совсем котейнер": такую характеристику дал valarray классу Страуструп )
Для хранения в valarray класс должен соответствовать спецификации Numric type. Класс с названием Inspector не очень похож на число. Более того, оператор += в данном случае служит для поэлементного сложения векторов, а не для добавления. Короче говоря используйте std::vector, тогда добавить элемент можно так:
::std::vector<Inspector> InspectorData{};
InspectorData.emplace_back(chNameDep, chTown, chRegion, chStreet, iBuilding, chNameInsp, chSurnameInsp, chPatronymicInsp, chPosition, chRank, iAge);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости