3

Visual Studio2005でC++を使用してテンプレートクラスを拡張しています。次のコマンドを使用してテンプレート基本クラスを拡張しようとすると、エラーが発生します。

template <class K, class D>
class RedBlackTreeOGL : public RedBlackTree<K, D>::RedBlackTree  // Error 1
{
 public:
  RedBlackTreeOGL();
  ~RedBlackTreeOGL();

オブジェクトをインスタンス化しようとすると、2番目のエラーが発生します。

RedBlackTreeOGL<double, std::string> *tree = new RedBlackTreeOGL<double, std::string>; // error 2

エラー1:

** redblacktreeopengl.hpp(27):エラーC2039:'{ctor}':[K = double、D = std::string]の'RedBlackTree'のメンバーではありません**

エラー2:

main.cpp(50):コンパイル中のクラステンプレートインスタンス化'RedBlackTreeOGL'への参照を参照してください

4

4 に答える 4

8

コードは、クラスではなくコンストラクターを継承しようとしています:-)

クラス宣言の開始は、

template <class K, class D>
class RedBlackTreeOGL : public RedBlackTree<K, D>
于 2008-12-08T09:14:04.017 に答える
2

OMG、私はとてもばかげていると感じます.....自分のコードをあまりにも長い間見てきました!

それはかなり基本的なことで、どうして見逃したのかわかりません!

James(およびSDX2000)に感謝します。これは、Jamesが言ったことの宣言の最後から「コンストラクター」を取り除くことで機能しました。

ありがとうございました :)

于 2008-12-08T09:23:33.717 に答える
1

RedBlackTree<K, D>::RedBlackTreeデフォルトのコンストラクタはありますか? 他のパラメーター化されたコンストラクター (ctors) がある場合、C++ はそれ自体で既定のコンストラクターを定義しません。

于 2008-12-08T09:02:16.100 に答える
0

@SDX2000:

はい、RedBlackTree::RedBlackTree でコンストラクターを定義しました。

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

RedBlackTree クラスのコンストラクタとデストラクタの本体も実装しました。

于 2008-12-08T09:10:07.317 に答える