Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Шаблоны (((


Автор: yaja 1.4.2005, 18:04
Решил написать простенькую иерархию шаблонов по использованию различных деревьев и обломался (((
Код

// Типа узел
template<class Key, class Data>
class BinaryNode {
private:
  friend class BinaryTree;
protected:
  Key key;
  Data data;
  BinaryNode<Key, Data> *left, *right, *parent;
...
};
// Обычное двоичное дерево
template<class Key, class Data, template<class Key, class Data> class Node = BinaryNode>
class BinaryTree {
protected:
  Node<Key, Data>* root;
public:
  BinaryTree<Key, Data, Node> () 
    : root(0) 
  {}

  virtual ~BinaryTree() {
    delete root;
  }
...
};
// Начинается интересно )))
template <class Key, class Data>
class AVLNode : public BinaryNode<Key, Data> {
private:
  friend class AVLTree;
protected:
  char balance;
public:
  AVLNode<Key, Data> (const Key& k, const Data& d) 
    : BinaryNode<Key, Data> (k, d), balance(0)
  {}
  AVLNode<Key, Data> *LBalance(bool& flag) {
    // что-то делаем и производим обмен данными между вершинами, т.е.
    AVLNode<Key, Data> *Left = left;
    left = left->parent; // выдается ошибка(дескать разные типы)
  }
...
};
// AVL дерево
template <class Key, class Data, template<class Key, class Data> class Node = AVLNode>
class AVLTree : public BinaryTree<Key, Data, Node> {
public:
  AVLTree<Key, Data, Node >() 
    : BinaryTree<Key, Data, Node >()
  {}
...
};


Пытался заставить ето работать, но тщетно. Потом пытался сделать так
Код

template<class Key, class Data, template<class Key, class Data> class Node = BinaryNode>
class BinaryNode {
private:
  friend class BinaryTree;
protected:
  Key key;
  Data data;
  Node<Key, Data> *left, *right, *parent;
};
...

Код

AVLNode<int, char> node(10, 's');

Но тогда мне выдалось такое, что очень давно не видел:
Цитата

  error C2262: 'node' : cannot be destroyed

Понимаю, что так разобраться трудно(могу выслать исходники), но если кто-то врубился о чем идет речь, то помогите.
%)))))

Автор: maxim1000 1.4.2005, 18:08
Цитата
error C2262: 'node' : cannot be destroyed

первое, что приходит в голову - еще раз проверить, все ли деструкторы находятся в public

Автор: yaja 1.4.2005, 18:11
Цитата

первое, что приходит в голову - еще раз проверить, все ли деструкторы находятся в public

К сожалению, да %)))

Автор: chipset 2.4.2005, 01:49
Вышли плз код на chipset.cpp smile gmail.com, помойму у тебя какая-то фигня с деструкторами и значениями темплейта по дефолту.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)