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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
Ktulu
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 17
#1

Шаблон бинарного дерева - C++

09.05.2011, 15:11. Просмотров 2968. Ответов 9
Метки нет (Все метки)

Здравствуйте.
Есть одна проблема и не получается её решить, надеюсь вы поможите. Делаю шаблон бинарного дерева. По сути сделал только вставку и решил проверить работает ли она, но при создании объекта появляется ошибка
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
#pragma once
#include <iostream>
using namespace std;
 
template <class T>
struct Elem
    {
        T info;
        Elem<T> *left, *right;
    };
template <class T>
class BinTree
{   
private:
    Elem<T>*root;   
public: 
    BinTree(void);
    ~BinTree(void);
    BinTree (const BinTree<T>&Tr);
    void Insert (Elem<T>*&, const T&);
    void Delete (Elem<T>*&, const T&);
    void Copy (Elem<T>*&, Elem<T>*);
    void Print (ostream &out, const Elem<T>*tr) const;
    char* longWay (Elem<T>*&, const T&);
    void MakeEmpty (Elem<T>*&);
    BinTree<T>& operator =(const BinTree <T>&);
    friend istream& operator >> (istream &, BinTree <T>&);
    friend ostream& operator << (ostream &, BinTree <T>&);
 
};
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
84
85
86
87
88
89
90
#include "StdAfx.h"
#include "BinTree.h"
 
template <class T>
BinTree<T>::BinTree(void)
{
    root=NULL;
}
template <class T>
BinTree<T>::~BinTree(void)
{
 
}
template <class T>
BinTree<T>::BinTree(const BinTree<T> &Tr)
{
 
}
template <class T>
void BinTree<T>::Copy(Elem<T>*&T1, Elem<T>*T2)
{
 
 
}
template <class T>
void BinTree<T>::Delete(Elem<T>*&Tr, const T&x)
{
    
}
template <class T>
void BinTree<T>::Insert(Elem<T>*&Tr, const T&X)
{
    if (Tr)
    {
        if (x<Tr->info)
        {
            Insert (Tr->left, x);
        }
        else (x>Tr->info)
        {
            Insert (Tr->right, x);
        }
    else
    {
        return
    }
            else
            {
                if (!(Tr=new Elem))
                {
                    throw 1;
                    Tr->info=x;
                    Tr->left=Tr->right=0;
                }
            }
    }
 
}
template <class T>
char* BinTree<T>::longWay(Elem<T>*&Tr, const T&x)
{
 
 
}
template <class T>
void BinTree<T>::MakeEmpty(Elem<T>*&)
{
 
}
template <class T>
void BinTree<T>::Print(std::ostream &out, const Elem<T>*tr) const
{
 
}
template <class T>
BinTree<T>&BinTree<T>::operator =(const BinTree<T>&)
{
    
 
}
template <class T>
ostream& operator << (ostream &, BinTree <T>&)
{
 
}
template <class T>
istream& operator >> (istream &, BinTree <T>&)
{
 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Kursovoi.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include "str.h"
#include "tochka.h"
#include "BinTree.h"
#include <conio.h>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    BinTree<char>B1;
 
    getch ();
    return 0;
}
1>Kursovoi.obj : error LNK2019: unresolved external symbol "public: __thiscall BinTree<char>::~BinTree<char>(void)" (??1?$BinTree@D@@QAE@XZ) referenced in function _wmain
1>Kursovoi.obj : error LNK2019: unresolved external symbol "public: __thiscall BinTree<char>::BinTree<char>(void)" (??0?$BinTree@D@@QAE@XZ) referenced in function _wmain

Подскажите, пожалуйста, в чём дело и как исправить проблему.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 15:11     Шаблон бинарного дерева
Посмотрите здесь:

Копирование бинарного дерева - C++
Имеется бинарное дерево типа class TreeNode { public: TreeNode(); //конструктор virtual ~TreeNode(); //деструктор ...

Балансировка бинарного дерева - C++
Попалась одна на вид простая задача. Код написал, но не проходит 10 тестов из 40. Лидеру команды &quot;Отбой&quot; на День Рождения подарили...

Прошивка бинарного дерева на С++ - C++
Уважаемые программисты! Может у кого то есть опыт по написанию программы по прошивке бинарного дерева на С++ или подскажет по какому...

Высота бинарного дерева - C++
Надо найти высоту бинарного дерева.

Удаление вершины бинарного дерева - C++
Как удалять вершины бинарного дерева вместе с потомками?

Шаблонный класс бинарного дерева - C++
всем привет, возник такой вопрос вот есть шаблонный класс бинарного дерева поиска, задается тип ключа и тип данных. есть метод, который...

Вывод бинарного дерева в консоль - C++
Доброго времени суток! Прошу помощи в выводе бинарного дерева на экран (в консоль). Есть шаблон: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
09.05.2011, 15:15     Шаблон бинарного дерева #2
Для шаблонов реализация должна находиться в одном файле с объявлениями.
Ktulu
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 17
09.05.2011, 15:24  [ТС]     Шаблон бинарного дерева #3
Извините, но я не совсем понял, я первый раз с шаблонами работаю. То есть должно быть так:
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
#pragma once
#include <iostream>
using namespace std;
 
template <class T>
struct Elem
    {
        T info;
        Elem<T> *left, *right;
    };
template <class T>
class BinTree
{   
private:
    Elem<T>*root;   
public: 
    BinTree(void)
    {
        root=NULL;
    }
    ~BinTree(void);
    BinTree (const BinTree<T>&Tr);
    void Insert (Elem<T>*&, const T&)
{
    if (Tr)
    {
        if (x<Tr->info)
        {
            Insert (Tr->left, x);
        }
        else (x>Tr->info)
        {
            Insert (Tr->right, x);
        }
    else
    {
        return
    }
            else
            {
                if (!(Tr=new Elem))
                {
                    throw 1;
                    Tr->info=x;
                    Tr->left=Tr->right=0;
                }
            }
    }
 
}
    void Delete (Elem<T>*&, const T&);
    void Copy (Elem<T>*&, Elem<T>*);
    void Print (ostream &out, const Elem<T>*tr) const;
    char* longWay (Elem<T>*&, const T&);
    void MakeEmpty (Elem<T>*&);
    BinTree<T>& operator =(const BinTree <T>&);
    friend istream& operator >> (istream &, BinTree <T>&);
    friend ostream& operator << (ostream &, BinTree <T>&);
};
Или я неправильно всё понял?
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
09.05.2011, 15:39     Шаблон бинарного дерева #4
В целом, верно, но вот у вас в Insert с if-else какие-то проблемы непонятные, включая синтаксические ошибки, да и вообще, думается, что работать это не будет. Как минимум, это должно выглядеть так, чтобы скомпилировалось:
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
void Insert (Elem<T>*& Tr, const T& x)
{
    if (Tr)
    {
        if (x<Tr->info)
        {
            Insert (Tr->left, x);
        }
        else (x>Tr->info)
        {
            Insert (Tr->right, x);
        }
    }
    else if (!(Tr=new Elem<T>))
        {
            throw 1;
            Tr->info=x;
            Tr->left=Tr->right=0;
        }
    else
    {
        return;
    }
}
думайте над алгоритмом вставки, а то у вас тут что-то не то.
mansp
18 / 18 / 0
Регистрация: 07.11.2010
Сообщений: 136
09.05.2011, 15:43     Шаблон бинарного дерева #5
столкнулся с той же проблемой когда делал шаблонный клас впервые...
в одном файле должна быть и обьявления и реализация , ты же просто обьявил функции в

Цитата Сообщение от Ktulu Посмотреть сообщение
void Delete (Elem<T>*&, const T&);
void Copy (Elem<T>*&, Elem<T>*);
void Print (ostream &out, const Elem<T>*tr) const;
char* longWay (Elem<T>*&, const T&);
void MakeEmpty (Elem<T>*&);
BinTree<T>& operator =(const BinTree <T>&);
friend istream& operator >> (istream &, BinTree <T>&);
friend ostream& operator << (ostream &, BinTree <T>&)
допиши реализацию... чуть ниже за пределами класса
[/CPP]
и ещо исправь френд функию перегрузки операторов она ведь тоже шаблонной должна быть... а то потом замучаешся
Ktulu
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 17
09.05.2011, 15:45  [ТС]     Шаблон бинарного дерева #6
Спасибо, я подумаю получше, но есть проблемы, программа до сих пор не работает

1>Kursovoi.obj : error LNK2019: unresolved external symbol "public: __thiscall BinTree<char>::~BinTree<char>(void)" (??1?$BinTree@D@@QAE@XZ) referenced in function _wmain
1>C:\Documents and Settings\user\Мои документы\Visual Studio 2005\Projects\Kursovoi\Debug\Kursovoi.exe : fatal error LNK1120: 1 unresolved externals

И вопрос, что тогда писать в cpp. файле?
mansp
18 / 18 / 0
Регистрация: 07.11.2010
Сообщений: 136
09.05.2011, 15:47     Шаблон бинарного дерева #7
ничего не надо там писать , только в файле с мейном подлючи свой файл с класом
рано тебе ещо компилировать его, ругаетса он потому что нет деструктора реализированого, и напиши конструктор копирования тогда будеш тестировать
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
09.05.2011, 15:48     Шаблон бинарного дерева #8
Вы не описали внутренности деструктора, допишите в объявлении
C++
1
2
3
~BinTree()
{
}
И ещё: не принято в c++ при отсутствии параметров писать void, лучше просто пишите пустые скобки.
mansp
18 / 18 / 0
Регистрация: 07.11.2010
Сообщений: 136
09.05.2011, 15:51     Шаблон бинарного дерева #9
желательно конешно оформить конструторы и все функции не в самом классе ,а вот так
C++
1
2
3
4
template<class T>  BinTree<T>::BinTree(void)
{
...........................реализация............
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2011, 16:00     Шаблон бинарного дерева
Еще ссылки по теме:

Написать сортировку бинарного дерева - C++
Как записать функцию, которая сортирует элементы бинарного дерева по возрастанию?Подскажите пожалуйста

Удаление узла бинарного дерева - C++
всем привет.вот есть у меня бинарное дерево тока фун-ии добавления и обхода.очень нужно удалени помогите плиз. .cpp #include &lt;iostream&gt;...

Проблемы с выводом бинарного дерева - C++
Вот, пытался сделать лабу. Проблема с выводом. Извините за код, знаю что он кривой, сделайте замечания!!! /* Два бинарных дерева...

Поперечное прохождение бинарного дерева - C++
Собственно вопрос такой. В каком порядке при этом происходит обход бинарного дерева и как это может быть реализовано. Про обратный,...

Удаление Узла Бинарного Дерева. - C++
Добрый День.Возникла проблема с реализацией части функции контейнера для удаления элемента с двумя узлами(по всем правилам бинарных...


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

Или воспользуйтесь поиском по форуму:
Ktulu
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 17
09.05.2011, 16:00  [ТС]     Шаблон бинарного дерева #10
Спасибо вам за советы, вроде бы стало более-менее понятно, будем продолжать думать
Yandex
Объявления
09.05.2011, 16:00     Шаблон бинарного дерева
Ответ Создать тему
Опции темы

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