Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 76

Шаблонная функция не работает

15.11.2014, 20:56. Показов 1554. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
using namespace std;
 
template <class T>void Print_Car(T &a);
 
struct Car {
    int Number; 
    char Color; 
    char Model;
public:
    Car()
    {
        Number = 0;
        Color = 0;
        Model = 0;
    }
};
class Manager;
 
class Trader {
    int size;
    Car* Garage;    
    Car* Sale_car;  
public:
    Trader() : size(100)
    {   
        Garage = new Car[this->size];
        for (int i = 0; i < this->size; i++)
        {
            this->Garage[i].Number = 0;
            this->Garage[i].Color = 0;
        }
 
        Sale_car = new Car[size];
        for (int i = 0; i < this->size; i++)
        {
            this->Sale_car[i].Number = 0;
            this->Sale_car[i].Color = 0;
        }
    }
};
 
class Manager {
    int size;
    Car* Sale_car;
public:
    Manager() : size(100)
    {
        Sale_car = new Car[size];
        for (int i = 0; i < this->size; i++)
        {
            this->Sale_car[i].Number = 0;
            this->Sale_car[i].Color = 0;
        }
    }   
};
 
void Contract(Trader &A, Manager &B);   //прототип
 
void Contract(Trader &A, Manager &B)
{
    cout << "Какие-то действия!";
    Print_Car(A);   //вызываем шаблонную функцию
    //
    Print_Car(B);
}
 
template <class T>
void Print_Car(T &obj)
{
    //пробую так
    //obj.Sale_car[i].Number
    //и так
    //obj->Sale_car[i].Number
}
 
int main()
{
    Trader A;
    Manager B;  
 
    return 0;
}
Здравствуйте уважаемые программисты !
Есть у меня функция Contract(60-я строчка), там я вызываю шаблонную функцию(функция на 68 строчке) и передаю объект класса. Вроде синтаксис правильный, только получить доступ к принимаемому объекту не могу. В функции Print_Car, буду работать только с одинаковыми полями для обоих классов и структурой, которая у обоих классов есть.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2014, 20:56
Ответы с готовыми решениями:

не работает шаблонная функция
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;list&gt; using namespace std; template &lt;class V, class E&gt; struct graph { ...

Как работает шаблонная функция countof?
Здравствуйте! Нашел в Интернете следующую шаблонную функцию countof, которая подсчитывает количество элементов в массиве. Проверил,...

Не работает шаблонная функция с типом char
Как реализовать шаблон функции для калькулятора для дробей с типом &lt;char&gt;?А то вместо чисел выводатся символы в дробях. С другими типами...

11
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
15.11.2014, 20:58
C++
1
2
3
4
5
6
7
8
template <class T>
void Print_Car(T &obj)
{
    //пробую так
    //obj.Sale_car[i].Number
    //и так
    //obj->Sale_car[i].Number
}
Где тут переменная i?
1
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 76
15.11.2014, 21:01  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Где тут переменная i?
Я ее стер, так как код не работал.
C++
1
int i = 0;
Просто с шаблонами второй раз работаю, как-то не приходилось.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
15.11.2014, 21:14
error: 'Car* Trader::Sale_car' is private
и причем тут шаблоны?
1
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 76
15.11.2014, 21:20  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
и причем тут шаблоны?
т.е. функцию, нужно сделать дружественной, чтобы получить доступ к privet-членам ?
и какой будет синтаксис ?)
C++
1
friend template <class T> void Print_Car(T &a);
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
15.11.2014, 21:32
Лучший ответ Сообщение было отмечено Ученик кода как решение

Решение

Цитата Сообщение от Ученик кода Посмотреть сообщение
т.е. функцию, нужно сделать дружественной, чтобы получить доступ к privet-членам ?
Как вариант...

Цитата Сообщение от Ученик кода Посмотреть сообщение
и какой будет синтаксис ?)
C++
1
friend template <class T> void Print_Car(T &a);
Почти

C++
1
template <typename T> friend void foo(T& t);
Однако такой синтаксис, сделает все варианты шаблона друзьями каждого класса. Это избыточно. В данном случае достаточно лишь чтобы 'Print_Car<Trader>' был другом 'Trader', а 'Print_Car<Manager>' был другом 'Manager'

C++
1
2
3
4
5
6
7
8
9
10
11
class Trader {
  ...
  friend void Print_Car<>(Trader& t);
  ...
};
 
class Manager {
  ...
  friend void Print_Car<>(Manager& t);
  ...
};
P.S. Ну и еще в программе не хватает массивного количества 'const'.

P.P.S. Непонятно также, зачем сделано предварительное объявление 'class Manager;'. Необходимости в нем вроде нет...
1
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 76
15.11.2014, 21:46  [ТС]
TheCalligrapher,
C++
1
2
3
4
template <typename T> void Print_Car(T& t)
{
    
}
а как получить доступ к объекту t ? через указатель и точку, не получается.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
15.11.2014, 21:55
Цитата Сообщение от Ученик кода Посмотреть сообщение
а как получить доступ к объекту t ? через указатель и точку, не получается.
Что именно означает это ваше "не получается"???

У меня все получается

C++
1
2
3
4
5
template <typename T> void Print_Car(T& t)
{
  int i = 0;
  obj.Sale_car[i].Number;
}
0
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 76
15.11.2014, 22:01  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что именно означает это ваше "не получается"???
))
все работает, просто студия после ввода точки
C++
1
t.size;
ничего не предложила для подстановки, я решил что по прежнему нету доступа.
0
15.11.2014, 22:03

Не по теме:

Цитата Сообщение от Ученик кода Посмотреть сообщение
ничего не предложила
студия заменяет мозг и здравый смысл?

0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
15.11.2014, 22:10
Цитата Сообщение от Ученик кода Посмотреть сообщение
ничего не предложила для подстановки
А как она вам сможет чего-то предложить для подстановки, если 't' имеет не известный заранее тип (параметр шаблона)?
1
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 76
15.11.2014, 22:11  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
студия заменяет мозг и здравый смысл?
нет, конечно не заменяет. Опыта нету, в следующий раз буду знать.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А как она вам сможет чего-то предложить для подстановки, если 't' имеет не известный заранее тип (параметр шаблона)?
Да, ступил.
Всем спасибо за помощь, без Вас я бы не справился !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2014, 22:11
Помогаю со студенческими работами здесь

Шаблонная функция
Как &quot;научить&quot; шаблонную функцию отличать массив от контейнера, то есть если написать: template &lt;class contains, class type&gt; type...

Шаблонная функция
Всем привет. Пытаюсь реализовать простенький парсер. Суть в том, что у меня есть ini файл с различными параметрами. Я все секции с...

Шаблонная функция
Нужно создать шаблонную функцию, в которой массив сортируется пузырьком, поиск максимального и минимального значения! Вот с поиском...

Шаблонная функция С++
Помогите пожалуйсто понять ошибку Используется шаблонная функция в первом вызове она отображает значение типа int во втором типа double...

Шаблонная функция
Дорогие форумчане, нуждаюсь в вашей помощи: имеется несколько функций, с большим объемом кода. Чтоб не повторять код для функций с другим...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru