1 / 1 / 0
Регистрация: 04.12.2015
Сообщений: 71
|
||||||
1 | ||||||
Компилятор не может вывести тип для темплейта, передаваемого в вектор03.07.2017, 23:49. Показов 1723. Ответов 18
Метки нет (Все метки)
Не работает такая вот конструкция:
Компилируется без ошибок, но вот любая попытка использования выдает ошибку. Проблема в том, что почему-то не подхватывается возвращаемое значение. Собственно, ошибка: error C2783: 'T1 getRandomElement(std::vector<_Ty,std::allocator<_Ty>> &)': could not deduce template argument for 'T1' Что я делаю не так и как заставить это работать? Нет, можно, конечно, сделать тип void, а возвращаемое вытаскивать через запись в переменную, которую сделать вторым аргументом функции, но хотелось бы починить этот вариант, а не делать новый.
0
|
03.07.2017, 23:49 | |
Ответы с готовыми решениями:
18
Узнать тип объекта передаваемого по ссылке Как определить тип передаваемого объекта [решено] Компилятор и тип МК Код для нескольких МК в проекте Компилятор не знает тип ushort |
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
04.07.2017, 00:03 | 2 |
пытаетесь объяснять на пальцах всякую фигню,
вместо того, что бы просто привести кодом минимальный пример-иллюстрацию вашей проблемы. показать код.
0
|
1 / 1 / 0
Регистрация: 04.12.2015
Сообщений: 71
|
||||||
04.07.2017, 00:06 [ТС] | 3 | |||||
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
04.07.2017, 00:27 | 4 |
вы всерьёз считаете,
что компилятор должен был догадаться, что { "a","b","c","d" } - это вектор интов?
0
|
1 / 1 / 0
Регистрация: 04.12.2015
Сообщений: 71
|
|
04.07.2017, 00:28 [ТС] | 5 |
Где вы увидели, что это вектор интов? В указанном коде я передаю туда const char*, не int.
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
04.07.2017, 00:43 | 6 | |||||
Сообщение было отмечено Siborgium как решение
Решение
http://rextester.com/GSHA48375
1
|
1 / 1 / 0
Регистрация: 04.12.2015
Сообщений: 71
|
|
04.07.2017, 00:49 [ТС] | 7 |
Благодарю, разобрался.
0
|
Croessmah
|
05.07.2017, 18:03
#8
|
Не по теме: hoggy, только генератор бы в thread_local запхнуть.
0
|
|
05.07.2017, 18:29
#9
|
0
|
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
|
|
05.07.2017, 18:38 | 10 |
Croessmah,
Тут же один поток, зачем тред локал?
0
|
Croessmah
|
05.07.2017, 19:52
#11
|
Не по теме: Undisputed, сегодня один, завтра два. Да и дело не в потоках. Постоянно seed переделывать зачем?
0
|
Undisputed
|
06.07.2017, 08:39
#12
|
Не по теме: Croessmah,
0
|
Croessmah
|
06.07.2017, 09:10
#13
|
0
|
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
|
||||||
06.07.2017, 09:25 | 14 | |||||
hoggy,
Много раз уже видел в кодах приведение к void без присваивания результата переменной как вы написали выше
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
||||||
06.07.2017, 09:38 | 15 | |||||
Undisputed, этот прием используется для подавления warning`а о неиспользуемой переменной. Иногда оборачивают в макрос к говорящим названием для придания большей декларативности.
1
|
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
|
|
06.07.2017, 10:16 | 16 |
DrOffset,
Ясно, спасибо! А не проще просто не объявлять переменные которые не собираемся использовать?
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
06.07.2017, 10:25 | 17 |
Ну если у тебя сигнатура функции такая, что там есть аргументы, но они в данный момент не используются, то это может быть актуально. Например, при переопределении виртуальной функции, часть аргументов которой не нужны в текущем варианте. В принципе в С++ можно просто оставить такой аргумент без имени. Но надо понимать, что этот паттерн очень старый, еще со времен С. А в С нельзя было оставлять аргументы функций неименованными.
1
|
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
|
|
06.07.2017, 10:39 | 18 |
DrOffset,
Ясно, насчёт переопределении функций думается мне что решение не очень... Потому что вызывающая сторона вынуждена передавать неиспользуемый аргумент, а это только усложняет код и тратит хоть и мало но лишние ресурсы... Наверное в таких случаях лучше было бы перегрузить функцию и задать нужное количество аргументов вместо того что бы переопределять ее с лишними параметрами. Или виртуальные методы не перегружаются/возникают проблемы в этих случаях?
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
06.07.2017, 11:44 | 19 |
Перегружаются, но если в базовом классе нет перегрузки, то ты добавлением таковой в наследнике ничего не решишь, она вызываться-то не будет
Вообще, надо сказать, что когда такое случается - это может (но не обязательно) говорить о кривом дизайне интерфейса, но мы же живем в реальном мире, а в реальном мире такое встречается. Поэтому если уж у тебя есть такой интерфейс, который оказывается избыточным для какого-то из наследников, то менять базовый класс для добавления туда перегрузки не всегда удастся безболезненно, если вообще будет возможным.
1
|
06.07.2017, 11:44 | |
06.07.2017, 11:44 | |
Помогаю со студенческими работами здесь
19
Компилятор не понимает тип Array Компилятор не может определить идентификатор Почему компилятор не распознает тип ofstream? Компилятор не опознает пользовательский тип данных Компилятор криво обрабатывает тип string Почему компилятор не понимает тип bool? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |