Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Yami
3 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 21
1

Функция возвращает auto

02.11.2013, 16:50. Просмотров 2033. Ответов 22
Метки нет (Все метки)

В настройках ставлю галочку Have g++ follow the C++11 ISO C++ language standard [-std=c++11]

Но все равно не компилится.

C++
1
2
3
4
5
template<typename T1,  typename T2>
auto Max(const T1 &a,  const T2 &b)
{
    return (a>b) ? a : b;
}
Ошибку показывает error: 'Max' function uses 'auto' type specifier without trailing return type|

Добавлено через 3 минуты
Как заставить ее скомпилироваться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 16:50
Ответы с готовыми решениями:

Ошибка: функция возвращает auto
Поставил галочку на Have g++ follow the C++11 ISO C++ language standard . Но...

Функция не возвращает результат=(
Добрый вечер. у меня такая проблема. мне нужно перегрузить функцию для моего...

Функция не возвращает значение
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include...

Функция возвращает массив
Как сделать чтобы функция возвращала массив(не исползуя указатели):(. К...

Функция get() не возвращает значение
Есть класс, в котором определен объект типа SDL_Surface*. Пытаюсь передать его...

22
0x10
02.11.2013, 16:52
  #2

Не по теме:

Эм... А как вообще компилятор должен на этапе компиляции понять значение какого типа вернет функция?

0
Belfegor
Ghost
173 / 173 / 40
Регистрация: 16.09.2012
Сообщений: 526
02.11.2013, 16:55 3
C++
1
2
3
4
5
template<typename T1,  typename T2>
auto Max(const T1 &a,  const T2 &b)->decltype(&a)
{
    return (a>b) ? a : b;
}
1
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 16:55 4
Смысла в это коде нет. Правильный вариант должен выглядеть как-то так:
C++
1
2
3
4
5
template<typename T>
T Max( const T & a,  const T & b )
{
    return (a>b) ? a : b;
}
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.11.2013, 16:56 5
Цитата Сообщение от Yami Посмотреть сообщение
Как заставить ее скомпилироваться?
Никак. Тип возврата не должен зависеть от логики внутри функции.

Добавлено через 27 секунд
Belfegor, типы разные же

Добавлено через 30 секунд
castaway, преобразуем T в bool?
0
0x10
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,377
02.11.2013, 16:56 6
castaway, ну только возвращаемое значение все-таки не bool.
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 16:57 7
0x10, да, я уже поправил.
0
Yami
3 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 21
02.11.2013, 17:03  [ТС] 8
Цитата Сообщение от Belfegor Посмотреть сообщение
C++
1
2
3
4
5
template<typename T1,  typename T2>
auto Max(const T1 &a,  const T2 &b)->decltype(&a)
{
    return (a>b) ? a : b;
}
А что такое ->decltype(&a) ?

Добавлено через 3 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Смысла в это коде нет. Правильный вариант должен выглядеть как-то так:
C++
1
2
3
4
5
template<typename T>
T Max( const T & a,  const T & b )
{
    return (a>b) ? a : b;
}
А если аргументы у функции разных типов? Так не получится
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 17:04 9
Цитата Сообщение от Yami Посмотреть сообщение
А если аргументы у функции разных типов?
А как ты разные типы сравнивать собрался? Например int и string ?
Я думаю в правильно написанных программах такого не должно быть.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.11.2013, 17:05 10
Цитата Сообщение от Yami Посмотреть сообщение
А что такое ->decltype(&a) ?
Это говорит, что возвращаемый тип будет такой же как у аргумента. Хотя в данном случае должно быть без &. И типы должны быть одинаковые.
1
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.11.2013, 17:07 11
std::common_type
1
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 17:08 12
Ну или уж тогда так:
C++
1
2
3
4
5
template <typename T0, typename T1, typename T2>
T0 Max( T1 a, T2 b )
{
    return (a > b) ? a : b;
}
1
Yami
3 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 21
02.11.2013, 17:10  [ТС] 13
Цитата Сообщение от castaway Посмотреть сообщение
А как ты разные типы сравнивать собрался? Например int и string ?
Можно сравнить int с double и вернуть максимальное

Цитата Сообщение от Tulosba Посмотреть сообщение
Это говорит, что возвращаемый тип будет такой же как у аргумента. Хотя в данном случае должно быть без &. И типы должны быть одинаковые.
Понятно
0
Tulosba
02.11.2013, 17:10
  #14

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
std::common_type
О сколько нам открытий чудных
Готовит .... стандарт C++11 (и даже C++14)

0
Yami
3 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 21
02.11.2013, 17:18  [ТС] 15
Цитата Сообщение от Jupiter Посмотреть сообщение
У меня проблемы с английским

Добавлено через 2 минуты
В принципе программа компилится. Правда не так работает как надо
[CPPtemplate<typename T1, typename T2>
auto Max(const T1 &a, const T2 &b) -> decltype(a)
{
return (a>b) ? a : b;
}][/CPP]





Цитата Сообщение от castaway Посмотреть сообщение
Ну или уж тогда так:
C++
1
2
3
4
5
template <typename T0, typename T1, typename T2>
T0 Max( T1 a, T2 b )
{
    return (a > b) ? a : b;
}
Дополнительный аргумент в функции. Подумаю на этим
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 17:19 16
Цитата Сообщение от Yami Посмотреть сообщение
Дополнительный аргумент в функции.
Ну.. не аргумент, а параметр шаблона. Аргументов по прежнему 2.
0
0x10
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,377
02.11.2013, 17:19 17
Цитата Сообщение от Yami Посмотреть сообщение
Дополнительный аргумент в функции. Подумаю на этим
Лучше все-таки подумать над сравнением объектов одного типа.
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.11.2013, 17:21 18
В gcc 4.8.x с флагом -std=c++1y все компилируется.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.11.2013, 17:26 19
Цитата Сообщение от diagon Посмотреть сообщение
В gcc 4.8.x с флагом -std=c++1y все компилируется.
С какими типами? А что если Max( 10, "42" )?
0
Jupiter
02.11.2013, 17:26     Функция возвращает auto
  #20

Не по теме:

Цитата Сообщение от Yami Посмотреть сообщение
У меня проблемы с английским
если бы только с ним:-|

0
02.11.2013, 17:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 17:26
Привет! Вот еще темы с ответами:

Функция не возвращает false
Вообщем str это строка, которая может содержать в себе знак математической...

Функция возвращает объект
Доброго времени суток! Как сделать, чтобы функция возвращала объект, ну или...

Функция возвращает структуру
Всем привет. Есть код взят из книжки &quot;С++ 2008 для начинающих&quot;, ошибок при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru