Не знаю, что там со вторым аргументом, но третий аргумент - точно выдаст ошибку:
Если указана передача по неконстантной ссылке, то передавать надо все-таки lvalue значение (например, переменную)
Пример (Compilation Error):
Чтоб взлетело, надо добавить модификатор const:
Подозреваю, что со вторым агументом то же самое: метод get_Road() возвращает не lvalue значение.
Event_4* worker = new Event_4(object.time_str, it_v->second[i_v]->get_Road().number, 4);
object - структура, где хранятся поля сообщений, приходящих в систему «Дороги».
object.time_str - это время сообщения в виде string (12:44 например)
it_v->second[i_v]->get_Road().number - это указатель, найденную в мапе дорог; по нему мы обратились к соответсвующей дороге из вектора дорог, расположенных на некоторой координате, и извлекли порядковый номер этой дороги.
тект ошибки:
error C2664: “Event_4::Event_4(Event_4 &&)”: невозможно преобразовать аргумент 2 из “int” в “int &”
ошибка пропадает, если в конструкторе класса наследника Event_4 (нарушение 4 типа) в передаваемых параметрах убрать передачу по ссылке (например, вместо int & road_id - писать - int road_id ).
вопрос состоит в том, что:
у меня, как и в первой задаче, есть конструктор в родительском Event. В каждом классе наследнике Event_i есть конструктор, определенный на основе исходного
при передаче параметров в конструктор я использую передачу по ссылке, как и раньше. Вот только в прошлый раз все прекрасно работало, а в этот раз компилятор ругается, что почему-то он пытается преобразовывать преобразовать адрес переменной к ее типу.
get_Road возвращает структуру, в которой находятся поля, описывающие дорогу. get_Road().number соотвественно возвращает порядковый номер дороги.
по поводу третьего аргумента, да, исправил. но ошибка идет из-за второго.
const надо поставить и перед вторым аргументом. Во всех конструкторах.
get_Road здесь возвращает rvalue-значение (“которое можно только сохранить”), поэтому проблемы. А аргумент, обозначенный как int&, ждет lvalue (“в которое можно сохранять”).
Совершенно неверно! Вы подаете объект типа int, а компилятор просит ссылку на int. Нет тут адреса, и никто его к типу не преобразует. В С++ cимвол & - это не только взятие адреса, но и ссылка. Будьте внимательны в этом вопросе.
В чем могут быть причины несоответствия ответов у меня на компьютере и на ejudge? Просто проверяю по инпутам у меня на компьютере выдает такой же оутпут, на ejudge другой…
а как отловить такую радость?
у меня в студии все по реквестам 1,2 идеально работает,
а вот ejudge мусором плюётся каким то.
то объекты перемешаны не пойми как, то их количество не совпадает с необходимым.
Бросать студию и писать в Eclipse с gcc?)
Можно попробовать логгировать значения ключевых переменных: ejudge вывод в stderr отображает.
Сравнить локальный вывод и на ejudge -> по ним определить проблемные участки кода.
Порядок вывода событий, произошедших в одну минуту, не важен.
По несовпадающему кол-ву можно определить, каких нехватает и где искать причину.
Роман Борисович, не понятно в чем проблема. При считывании данных (времени объекта и преобразовании в int с помощью аtoi) выбрасывается исключение “terminating with uncaught exception of type std::out_of_range: basic_string”. C функцией stoi выбрасывалось invalid_argument. Дома на Visual Studio программа выполняется и выдает верный ответ. На Ideone C++ 5.1 (комп. g++ 5.1) тоже все компилируется.
Вот на всякий случай тект считывания: http://pastebin.com/mtzNby91