Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Yami
3 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 21
#1

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

02.11.2013, 16:50. Просмотров 1499. Ответов 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 (C++):

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

Функция не возвращает значение - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int ca(int a) { int i,r; r = 0; ...

Функция не возвращает false - C++
Вообщем str это строка, которая может содержать в себе знак математической операции, скобки, число (например 1, 5, 556, 33 ..) и т.д. ...

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

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

Функция не возвращает значение - C++
Функция ничего не возвращает: int Return(int s) { return s; } Передаю в аргумент S целочисленную переменную, но результата в...

22
0x10
02.11.2013, 16:52
  #2

Не по теме:

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

0
Belfegor
Ghost
173 / 173 / 6
Регистрация: 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
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.11.2013, 16:56 #5
Цитата Сообщение от Yami Посмотреть сообщение
Как заставить ее скомпилироваться?
Никак. Тип возврата не должен зависеть от логики внутри функции.

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

Добавлено через 30 секунд
castaway, преобразуем T в bool?
0
0x10
2465 / 1637 / 240
Регистрация: 24.11.2012
Сообщений: 4,039
02.11.2013, 16:56 #6
castaway, ну только возвращаемое значение все-таки не bool.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 17:04 #9
Цитата Сообщение от Yami Посмотреть сообщение
А если аргументы у функции разных типов?
А как ты разные типы сравнивать собрался? Например int и string ?
Я думаю в правильно написанных программах такого не должно быть.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.11.2013, 17:05 #10
Цитата Сообщение от Yami Посмотреть сообщение
А что такое ->decltype(&a) ?
Это говорит, что возвращаемый тип будет такой же как у аргумента. Хотя в данном случае должно быть без &. И типы должны быть одинаковые.
1
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.11.2013, 17:07 #11
std::common_type
1
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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 Посмотреть сообщение
std::common_type
У меня проблемы с английским

Добавлено через 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 17:18
Привет! Вот еще темы с ответами:

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

Функция не возвращает значение - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &quot;stdafx.h&quot; using namespace std; const int max_size = 100; ...

Функция не возвращает результат=( - C++
Добрый вечер. у меня такая проблема. мне нужно перегрузить функцию для моего класса: numb numb::operator +(const numb &amp;p)const { ...

Функция возвращает объект - C++
Доброго времени суток! Как сделать, чтобы функция возвращала объект, ну или указатель на объект. Использую так: Image-&gt;Picture...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
02.11.2013, 17:18
Ответ Создать тему
Опции темы

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