Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
 Аватар для gretham
19 / 19 / 1
Регистрация: 12.08.2011
Сообщений: 59

Использование указателя на объект шаблонного класса в шаблонном классе.

12.08.2011, 10:15. Показов 7719. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Мне нужно реализовать граф. Начал с вершин и ребер, причем и ребра и вершины - шаблонные классы, для того чтобы и ребро и вершина могли содержать разные данные.
В ребре указатели на 2 вершины.

Класс вершины:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <class T> class Vertex {
        private: 
            char* name;
            T data;
            int index;
        public: 
            Vertex();
            Vertex(char* nam, T dat, int ind);
            ~Vertex();
            char* getName(); 
            T getData(); //возвращает данные, связанные с вершиной,
            void setName(char *nam); //задает имя вершины,
            void setData(T dat); //записывает данные data в дескриптор вершины.
    };
Класс ребра:
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
template <class TT>
class Edge {
    private:
        Vertex *v1, *v2;
        int w;
    public:
        Edge(Vertex *va, Vertex *vb) {
            v1 = va;
            v2 = vb;
        }
            Edge(Vertex *va, Vertex *vb, int ww) {
            v1 = va;
            v2 = vb;
            w = ww;
           }
           Edge(Vertex *va, Vertex *vb, int ww, TT dat) {
            v1 = va;
            v2 = vb;
            w = ww;
            data = dat;
           }
           ~Edge();
        
           int getW();
           void setW(int ww);
           TT getData();
           void setData(TT dat);
};
При попытке создать ребро с двумя ребрами:
C++
1
2
3
Vertex<int> e1("parampampam", 123, 0);
Vertex<int> e2("parampampam", 123, 1);
Edge<int> rebro(&e1, &e2);
Появляется вот такая ошибка:


1>c:\users\артем\documents\visual studio 2010\projects\kp2\kp2\Vertex.cpp(6): error C2955: Vertex: для использования класса шаблон требуется список аргументов шаблон


Подскажите, пожалуйста, в чем дело?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2011, 10:15
Ответы с готовыми решениями:

Создать объект шаблонного класса в другом классе
Как создать объект шаблонного класса в другом классе и вызвать через этот объект функцию? class Products { //int meat, fruit,...

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); } template &lt;class T&gt; void...

Определение класса в шаблонном классе
Помогите разобраться с тем, как синтаксически правильно давать определения методов подкласса шаблонного класса и методов шаблонного класса,...

26
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
14.08.2011, 01:09
Студворк — интернет-сервис помощи студентам
gretham, ну, лежит у Вас где-то поле неизвестного вам заранее типа, хранить не проблема, но работать-то с ним как собираетесь?
0
 Аватар для gretham
19 / 19 / 1
Регистрация: 12.08.2011
Сообщений: 59
14.08.2011, 01:35  [ТС]
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
gretham, ну, лежит у Вас где-то поле неизвестного вам заранее типа, хранить не проблема, но работать-то с ним как собираетесь?
Как минимум мне нужно будет менять это поле (т. е. значение) и не факт, что оно будет того же типа (это в идеале конечно).

Возможно я не так выразился, поэтому прям приведу кусок из задания)

АТД «Дескриптор вершины графа»
Дескриптор вершины содержит поля:
name – имя вершины,
data – данные, связанные с вершиной,
index – индекс вершины в структуре графа или -1,
Интерфейс АТД «Дескриптор вершины графа» включает операции:
Конструктор ():поле name не определено, поле data не определено,
Конструктор (name, data): name - имя вершины, data - данные, связанные с вершиной,
GetName( ) - возвращает имя вершины,
GetData( ) - возвращает данные, связанные с вершиной,
SetName(name ) – задает имя вершины,
SetData(data) – записывает данные data в дескриптор вершины.

АТД «Дескриптор ребра графа»
Дескриптор ребра содержит поля:
v1 - дескриптор вершины, из которой исходит ребро,
v2 - дескриптор вершины, в которую входит ребро,
w - вес ребра,
data - данные, связанные с ребром,
Интерфейс АТД «Дескриптор ребра графа» включает операции:
Конструктор (v1, v2): v1 - дескриптор вершины, из которой исходит ребро, v2 - дескриптор вершины, в которую входит ребро,
Конструктор (v1, v2, w ): v1 - дескриптор вершины, из которой исходит ребро, v2 - дескриптор вершины, в которую входит ребро, w - вес ребра,
Конструктор (v1, v2, w, data): v1 - дескриптор вершины, из которой исходит ребро, v2 - дескриптор вершины, в которую входит ребро, w - вес ребра, data - данные, связанные с ребром
v1( ) - возвращает дескриптор вершины, из которой исходит ребро,
v2( ) - возвращает дескриптор вершины, в которую входит ребро,
from (дескриптор вершины v) - возвращает признак исхода ребра из заданной вершины v,
other(дескриптор вершины v) - возвращает дескриптор вершины, связанной с вершиной v данным ребром,
GetW ( ) - возвращает вес ребра,
SetW (вес ребра) - изменение веса ребра,
GetData( ) - возвращает данные, связанные с ребром,
SetData(данные) - изменение данных, связанных с ребром.

Здесь два указателя на вершины лежат в ребре, и ребра и вершины шаблонные (обязательное условие) и данные могут быть разных типов.
Вот как - то так))
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
14.08.2011, 01:45
gretham, а с чего вы взяли что у вершин и ребер данные будут разных типов?
0
 Аватар для gretham
19 / 19 / 1
Регистрация: 12.08.2011
Сообщений: 59
14.08.2011, 02:05  [ТС]
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
gretham, а с чего вы взяли что у вершин и ребер данные будут разных типов?
Если я слеплю из всего этого граф в итоге, то получится, что все вершины и ребра будут содержать только данные одного и того же типа.

Какой же смысл реализовывать структуру хранения данных, в которой может быть только один тип данных?

Блин, придумал! (вернеемодифицировал то, что друг посоветовал)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template <class Data> class Vertex {
  private:
    Data data;
  public:
    Vertex(){}
};
template <class VertexA, class VertexB, class Data> class Edge
{
  private:
    VertexA *v1;
    VertexB *v2;
    Data data;
  public:
    Edge(VertexA *a, VertexB* b) : v1(a), v2(b) {}
};
 
int main() {
  Vertex<int> a;
  Vertex<char*> b;
  Edge<Vertex<int>, Vertex<char*>, int> L(&a, &b);
}

Писал по ходу, так что возможны ошибки.
0
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
14.08.2011, 02:10
gretham, интересно будет посмотреть, как из этого можно слепить граф с десятком-другим рёбер
0
 Аватар для gretham
19 / 19 / 1
Регистрация: 12.08.2011
Сообщений: 59
14.08.2011, 02:12  [ТС]
Цитата Сообщение от grizlik78 Посмотреть сообщение
gretham, интересно будет посмотреть, как из этого можно слепить граф с десятком-другим рёбер

Мне тоже

Могу потом результаты тестирования выложить, если интересно)
0
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
14.08.2011, 02:14
Ну мне просто интересно, где будет храниться большое количество разнотипных рёбер и вершин, и как с этими рёбрами и вершинами работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.08.2011, 02:14

Хранение в map указателя на функцию-член шаблонного класса
Здравствуйте! Сделал я себе вызов написать джунгли из ООП деревьев, типо, объекты обмениваются между собой сообщениями используя их...

Объявление шаблона класса, а в классе объявляется массив шаблонного типаа
Подчеркивает не правильное объявление массива T TMP = new T; public class STCK &lt;T&gt;{ private int Len; private T STC ; ...

Как использовать объект класса, созданого в определеном классе, в другом классе
У меня такой вопрос,как использовать объект класса,созданого в определеном классе,в другом классе.У меня есть объект pl класса Player,это...

Использование фабрики для шаблонного класса
Вот класс template &lt;class T&gt; class ConcreteConverter { T _value; long long _maxValue; long long _minValue; public: ...

Создание шаблонного класса потомка и использование им родительских методов
Добрый день! По заданию нужно сделать класс с реализацией двусвязного списка, и некоторые методы добавить уже в классе потомке. ...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru