Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 08:03   #1
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию Шаблон класса дерева

Здравствуйте! Я понемногу изучаю c++, вот решил разобраться с шаблонами класса и написать для этого шаблон класса двоичного дерева.
При написании кода руководствуюсь книгой Лафоре.
Код:
#include <iostream>
using namespace std;


template <class Type> 
struct sTree
{
	Type key;
	sTree *left;
	sTree *right;
};

template <class Type> 
class cTree
{
	public:	
		sTree<Type> *root;
		
		cTree()
		{	root = NULL;	}

		void AddNode(Type val);
		void PrintTree(int n);
};

template<class Type> 
void cTree<Type>::AddNode(Type val)
{
			
	if (val == root->key) 
	cout << "Node is already in tree\n";
	sTree<Type> *newnode = new sTree<Type>;
	if (val < root->key)
	{
		if (root->left == NULL) 
			root->left = newnode;
		else root->left->AddNode(val); /*(1)*/
	}
	if (root->key < val)
	{
		if (root->right == NULL) 
			root->right = newnode;
		else root->right->AddNode(val);/*(2)*/
	}
}

template<class Type> 
void cTree<Type>::PrintTree(int n)		
{
	root->left->PrintTree(left,n+1); /*(3)*/
	for (int i = 0; i < n; i++)
		cout << " ";
	cout << root->key;
	root->right->PrintTree(right,n+1);/*(4)*/
}
int main(void)
{
	cTree<int> t;
	t.AddNode(10);
	t.AddNode(20);
	t.AddNode(30);
	t.AddNode(140);
	t.AddNode(50);
	t.PrintTree(1);
	return 0;
}
Компилятор(Visual Studio 2008) выдаёт ошибки:

/*(1)*/error C2039: 'AddNode' : is not a member of 'sTree<Type>'
/*(2)*/error C2039: 'AddNode' : is not a member of 'sTree<Type>'
/*(3)*/error C2039: 'PrintTree' : is not a member of 'sTree<Type>'
/*(4)*/error C2039: 'PrintTree' : is not a member of 'sTree<Type>'
Как в таком случае будет правильно написать рабочий код?
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Старый 22.05.2012, 09:23   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

У вас есть класс sTree, составляющий структуру дерева, и класс cTree, обеспечивающий интерфейс доступа к дереву. Функция добавления есть только у последнего, но вы вызываете ее и у объектов класса sTree:
Код:
root->left->AddNode(val);
Как написать рабочий код? Подумать, кому какие функции нужны, и не путаться в типах объектов.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Шаблон бинарного дерева. Ошибки Lerris Помощь студентам 0 05.05.2012 23:21
шаблон класса списка Anton1355 Помощь студентам 0 13.03.2012 20:59
Как правильно организовать непростой шаблон двоичного дерева? nowaalex Общие вопросы C/C++ 10 02.12.2010 02:47
C++шаблон класса cati Помощь студентам 1 30.04.2010 00:24
Шаблон класса androidvsu Общие вопросы C/C++ 2 26.04.2009 11:57