Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
skales007
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
1

Укажите пожалуйста ошибку(и)

17.02.2016, 19:23. Просмотров 211. Ответов 8
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
struct box
{
    char maker[40];
    float height;
    float width;
    float length;
    float volume;
};
 
template <class T>
T vol(T a, T b);
 
template <> char* vol<box>(box a, box b);
 
int main()
{
    box a = {"A", 1, 2, 3, 4};
    box b = {"B", 1, 2, 3, 7};
    
    cout << vol(a, b) << endl; 
    return 0;
}
 
template <class T>
T vol(T a, T b)
{
    return a > b ? a : b;
}
 
template <> char* vol<box>(box a, box b)
{
    return a.volume > b.volume ? a.maker : b.maker;
}
До меня что-то ни в какую не доходит =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2016, 19:23
Ответы с готовыми решениями:

Укажите ошибку пожалуйста
№ 3 вариант 8 #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std;...

Задачка по C++! Укажите пожалуйста на ошибку!
Набросал упрощенный вариантик программы. Пытаюсь в конструкторе zveri...

Укажите на ошибку пожалуйста C++ код
Всего выдаёт 2 ошибки 1 C2760 Синтаксическая ошибка: ожидается «Нет данных» не...

Укажите ошибку!
В строке удвоить все символы ‘&amp;’. Под вставкой символа n в строку после к-го...

Укажите на ошибку
Подскажите ошибку пожалуйста #include &lt;iostream&gt; #include &lt;math.h&gt; using...

8
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,207
Записей в блоге: 1
Завершенные тесты: 2
17.02.2016, 19:31 2
skales007, Строка 22 как минимум, ты там пытаешься структуру с помощью потока вывода вывести.

Добавлено через 57 секунд
Строка 29, пытаетесь сравнить структуры, хотя operator> для не не определен.

Добавлено через 2 минуты
Строка 15, почитайте про шаблонные функции подробнее.
1
skales007
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
17.02.2016, 20:53  [ТС] 3
Просто мне казалось, что я не структуры сравниваю, а только ее члены. Но раз так, и правда нужно повнимательнее изучить шаблоны.

Добавлено через 36 минут
Сделал так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
using namespace std;
struct box
{
    char maker[40];
    float height;
    float width;
    float length;
    float volume;
};
 
template <typename T>
void vol(T &a, T &b);
 
template <> void vol<box>(box &a, box &b);
 
int main()
{
    box a = {"A", 1, 2, 3, 4};
    box b = {"B", 1, 2, 3, 7};
    
    vol(a, b); 
    return 0;
}
 
template <typename T>
void vol(T &a, T &b)
{
    if(a > b)
        cout << a << endl;
    else
        cout << b << endl;
}
 
template <> void vol<box>(box &a, box &b)
{
    if(a.volume > b.volume)
        cout << a.maker << endl;
    else
        cout << b.maker << endl;
}


И, думаю, зачем же мне надо вообще было именно возвращать наибольшее значение, когда достаточно его было вывести в самой функции.
0
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,207
Записей в блоге: 1
Завершенные тесты: 2
18.02.2016, 12:14 4
skales007, Вы ничего не исправили, просто добавили ссылки и тернарный оператор заменили на if. Повторяю вам, a и b - структуры, они не могут сравниваться программно, компилятор может сравнивать определенные значения, но никак не структуры!!!
0
skales007
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
18.02.2016, 12:45  [ТС] 5
makfak, я понимаю, что структуры сравнивать нельзя. Но, как мне казалось, я сравнивал ее члены, а не сами структуры. То что я заменил тернарный оператор на if, это понятно, но делал я это исключительно из удобства. Я думал, что теперь сделал правильно, но раз нет не могли бы вы ткнуть пальцем как надо? Просто даже в книге подобные вещи реализовались примерно так, хотя возможно мне это показалось.

Получается, что здесь я сравниваю структуры (а не их члены)? Правильно понимаю?
C++
1
2
3
4
if(a.volume > b.volume)
        cout << a.maker << endl;
    else
        cout << b.maker << endl;
0
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,207
Записей в блоге: 1
Завершенные тесты: 2
18.02.2016, 12:49 6
skales007, Строки с 26 по 33 гляньте.
0
skales007
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
18.02.2016, 12:58  [ТС] 7
makfak, но ведь есть явная специализация для box
Код
template <> void vol<box>(box &a, box &b);
, в результате чего будет использоваться другой код. Или я чего то не понимаю? Если что прошу пращения за то, что туплю =) Ну не могу понять и все тут))
0
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,207
Записей в блоге: 1
Завершенные тесты: 2
18.02.2016, 13:01 8
skales007, Да, действительно, я не посмотрел на то, что название 2-й функции совпадает с 1-м.
0
skales007
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
18.02.2016, 13:03  [ТС] 9
makfak, тогда я, пожалуй, спокоен))
0
18.02.2016, 13:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2016, 13:03

Укажите на ошибку
Привет, есть проект, в нем был только один файл core.cpp в нем было и...

Укажите на ошибку
Проблема с enum. Пишет что, нужно что-то перед enum. Поясните пожалуйста...

Укажите ошибку в массивах
Вобщем, в первом задании надо создать и вывести массив. Легко, конечно. Во...


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

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

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