Итерацию по вектору объектов

96
03 марта 2021, 05:30

QtCreator, cmake. Не даёт проитерироваться по вектору объектов и передать их в функцию.

Ошибка /home/bai/pplab1/main.cpp:19: ошибка: call to implicitly-deleted copy constructor of 'Detail'
    for (Detail counter : listDetail) {
            ^       ~

Код:

#include <iostream>
#include <vector>
#include "machine.h"
#include "detail.h"
#include <thread>
#include <chrono>
using namespace std::chrono_literals;
void Process(Detail &list_p) {
    while(list_p.Get_machine_list().size() > 0 && list_p.Get_state() < 3) {
        if (list_p.Get_last_time() > 0) {
            int temp = list_p.Get_last_time();
            list_p.Set_last_time(--temp);
        }
        std::this_thread::sleep_for(2s);
    }
}
void Start(const std::vector<Detail> &listDetail) {
    for (Detail counter : listDetail) {
        Process(counter);
    }
}

int main() {
    std::vector<Machine>listMachine = {{1, "Collector"}, {2,"Painter"}, {3, "Polisher"}};
    std::vector<Detail>listDetail = {{1, "LadaPriora", 3, listMachine[0], listMachine[1]}, {2, "KiaRio", 4, listMachine[2]},
                                     {3, "FordFocus", 7, listMachine[1], listMachine[2]}, {4, "ToyotaPrado", 9, listMachine[0]}};
    std::cout << "N | ";
    for (auto &x : listMachine){
        std::cout << "  R" << x.Get_id() << " ";
    }
    std::cout << " | ";
    for (auto &x : listDetail) {
        std::cout << " P" << x.Get_id() << "     ";
    }
    std::cout << std::endl;
    Start(listDetail);
    return 0;
}

UPD: Исправил строку:

void Start(std::vector<Detail> &listDetail) {
    for (Detail &counter : listDetail) {
        Process(counter);
    }
}

Но появилась ошибка

/usr/include/c++/6.3.0/bits/stl_construct.h:75: ошибка: call to implicitly-deleted copy constructor of 'Detail'
    { ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
                                     ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
Answer 1

Ну вам же прямо говорит компилятор: у вашего класса отсутствует конструктор копирования. В вашем for просто обращайтесь к по ссылке.

А ещё конструктор вектора не может принимать объекты без конструктора копирования (по крайней мере в таком виде). Если вы используете 11 стандарт, то просто создайте пустой вектор и заполните его с помощью emplace_back.

READ ALSO
Как избавится от дублирования кода в шаблоне template?

Как избавится от дублирования кода в шаблоне template?

Всем привет, мне нужно построить код внутри шаблона который тоже будет шаблоном Вот мой код

118
Error: $scope.$watch is not a function Angular 1.6

Error: $scope.$watch is not a function Angular 1.6

Объявляю $watch на переменную, но вылетает эта ошибка:

123
JavaScript. Мгновенная печать

JavaScript. Мгновенная печать

Возможно сделать так, что при открытии html файла, он сразу выводился на печать (в PDF) без данного окна? (изображение ниже)

127
Как удалить элемент без идентификатора

Как удалить элемент без идентификатора

Есть div, который не имеет ни класса, ни id или nameРедактировать html код этого тега нельзя (то есть нельзя приписать ему идентификатор)

93