Добавить объект в valarray

198
16 мая 2018, 17:10

Подскажите пожалуйста, как можно добавить объект в valarray. Есть valarray

valarray<Inspector> InspectorData;  

Пытаюсь добавить таким способом:

InspectorData.operator+= (Inspector(chNameDep, chTown, chRegion, chStreet, iBuilding, chNameInsp, chSurnameInsp, chPatronymicInsp, chPosition, chRank, iAge));

Но получаю ошибку.

C2676    бинарный "+=": "Inspector" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору.

Подскажите пожалуйста, как добавить элемент.

Заранее благодарен за помощь.

Answer 1

Вы конечно можете создать обьект valarray<Inspector>, но:

  • если Inspector не имеет аргументы по умолчанию:

Вы должны сразу обозначить эти аргументы и количество:

  valarray<Inspector> inspactorData(Inspector(arg1, arg2,...), 10);

тогда вы получаете inspactorData с 10 обьектами Inspector(arg1, arg2,...), которые потом можете заменить другими.

  • Если же Inspector имеет все таки конструктор по умолчанию, то:

вы можете создать обьект

 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 классу Страуструп )

Answer 2

Для хранения в valarray класс должен соответствовать спецификации Numric type. Класс с названием Inspector не очень похож на число. Более того, оператор += в данном случае служит для поэлементного сложения векторов, а не для добавления. Короче говоря используйте std::vector, тогда добавить элемент можно так:

::std::vector<Inspector> InspectorData{};
InspectorData.emplace_back(chNameDep, chTown, chRegion, chStreet, iBuilding, chNameInsp, chSurnameInsp, chPatronymicInsp, chPosition, chRank, iAge);
READ ALSO
Прежнее значение для функции calc()

Прежнее значение для функции calc()

Есть макет, на котором в навигации у элементов списка разные отступы слева друг от другаЯ задал общий класс всем элементам и через :nth-child для...

226
Работа с формами с помощью AJAX и POST запросов в Django

Работа с формами с помощью AJAX и POST запросов в Django

Работаю с DjangoНаписал парсер, который собирает подписчиков в инстаграме

187
Ошибка в module.js

Ошибка в module.js

Пытаюсь выполнить команду node generate" но вылазит ошибка:

310
Скобки у модуля

Скобки у модуля

Я понимаю зачем нужен модуль и вобще зачем нужна инкапсуляцияОднако никак не могу понять чем обусловлен его синтаксис (function(){ код })()

186