3

Я простирающийся шаблонный класс с использованием C++ в Visual Studio 2005. Это дает мне ошибку, когда я пытаюсь расширить шаблон базового класса с:Как решить: "ошибка C2039: '{ctor}': не является членом" в 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: '{} т е р': не является членом 'RedBlackTree'с [ K = двойной, D = станд :: строка ] **

Ошибка 2:

main.cpp (50): см ссылку на шаблон класса экземпляра 'RedBlackTreeOGL' составляется

ответ

8

Код пытается наследовать конструктор, а не класс :-)

Начало класса decla рациона должно быть

template <class K, class D> 
class RedBlackTreeOGL : public RedBlackTree<K, D> 
1

Есть ли у RedBlackTree<K, D>::RedBlackTree конструктор по умолчанию? C++ не определяет конструктор по умолчанию сам по себе, если у вас есть другие параметризованные конструкторы (ctors).

0

@ SDX2000:

Да, я определил конструктор в RedBlackTree :: RedBlackTree:

template <class K, class D> 
class RedBlackTree 
    { 
    public: 
     RedBlackTree(); 
     // Deleting a storage object clears all remaining nodes 
     ~RedBlackTree(); 

Я также реализовал тело для constuctor и деструктор для класса RedBlackTree

2

OMG, я чувствую себя таким глупым ..... слишком долго смотрел на свой собственный код!

Это довольно простая вещь, и я не знаю, как я ее пропустил!

Спасибо, Джеймс (и SDX2000), это сработало, взяв «конструктор» от конца декларации к тому, что сказал Джеймс.

Спасибо :)

+0

Эй, дело бывает! Я думал, что RedBlackTree был внутренним классом, но упустил тот факт, что внешний класс имел то же имя, что и внутренний класс, что невозможно, поэтому вторым RedBlackTree был ctor. –

Смежные вопросы