Я расширяю класс шаблона с помощью C++ в Visual Studio 2005. Когда я пытаюсь расширить базовый класс шаблона с помощью:
template <class K, class D>
class RedBlackTreeOGL : public RedBlackTree<K, D>::RedBlackTree // Error 1
{
public:
RedBlackTreeOGL();
~RedBlackTreeOGL();
и вторая ошибка, когда я пытаюсь создать экземпляр объекта:
RedBlackTreeOGL<double, std::string> *tree = new RedBlackTreeOGL<double, std::string>; // error 2
Ошибка 1:
** redblacktreeopengl.hpp (27): ошибка C2039: '{ctor}': не является членом 'RedBlackTree' с [ K = двойной, D = std :: строка ] **
Ошибка 2:
main.cpp (50): см. ссылку на компилируемый экземпляр шаблона класса RedBlackTreeOGL.





Есть ли у RedBlackTree<K, D>::RedBlackTree конструктор по умолчанию? C++ не определяет конструктор по умолчанию сам по себе, если у вас есть другие параметризованные конструкторы (ctors).
@ SDX2000:
Да, я определил конструктор в RedBlackTree :: RedBlackTree:
template <class K, class D>
class RedBlackTree
{
public:
RedBlackTree();
// Deleting a storage object clears all remaining nodes
~RedBlackTree();
Я также реализовал тело для конструктора и деструктора для класса RedBlackTree
Код пытается унаследовать конструктор, а не класс :-)
Начало объявления класса должно быть
template <class K, class D>
class RedBlackTreeOGL : public RedBlackTree<K, D>
OMG, я чувствую себя такой глупой ... слишком долго смотрел на свой собственный код!
Это довольно простая вещь, и я не знаю, как я ее пропустил!
Спасибо, Джеймс (и SDX2000), это сработало, убрав «конструктор» с конца объявления на то, что сказал Джеймс.
Спасибо :)
Эй, всякое бывает! Я думал, что RedBlackTree был внутренним классом, но упустил тот факт, что внешний класс имел то же имя, что и внутренний класс, что невозможно, поэтому второй RedBlackTree был ctor.