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

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

15.11.2014, 20:56. Показов 1588. Ответов 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
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
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
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
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru