0

まだC++でかなり新しく、ここでノッチをキックしようとしています。入れ子になったNodeクラスを使用してHeapクラスを構築し、ヒープクラスにヒープソートアスペクトを追加したいと思います。私はJavaと似たようなことをしましたが、.cppファイルにネストされたクラスを定義しようとしています。ヘッダファイルからネストされたクラスを定義する

#pragma once 
#ifndef HEAP_H 
#define HEAP_H 

template <class T> 
class Heap 
{ 

public: 

    class Node 
    { 
    public: 
     Node(T); 
     T data; 

    private: 
     Node *parent; 
     Node *left_child; 
     Node *right_child; 
     boolean is_root; 
    }; 


    Heap(T*, int); 
    sort_it(); 


private: 
    T *unsorted_list 
    Node root; 
    void build_heap(); 
    void add_node(Node); 
    void swap_root(); 
    void trickle_down(); 
    void heap_sort(); 
}; 


#endif 

私は.cppファイルで私の入れ子になったクラスを定義するために行くとき今、私は単に...

#include "stdafx.h" 
#include "Heap.h" 
#include <iostream> 

//Defining Heap Constructor 
Heap::Heap(T* incoming_array, int _size) 
    { 
     unsorted_list = incoming_array; 
     size = _size; 
    } 

//Defining Node Constructor 
Heap::Node(T _data) 
    { 
     data = _data; 
     left_child = right_child = parent = Null; 
     is_root = false; 
    } 

が、私は私の問題は、私はテンプレートを組み込んでいますどのようであればわからないことができない、または内部クラスを定義するための私の構文が間違っている場合ジェネリックプログラミングとネストされたクラスの両方は、C++で私には慣れていません

+0

をメンバーを宣言し、クラス外でテンプレートクラスのコンストラクタを定義するには別のcppファイルで、ヘッダファイルのクラス定義に関数を記述してください。 –

答えて

1

ネストしたクラスでジェネリック型を使用する場合は、テンプレートを指定する必要があります。

template<class T> 
class Node 

次のように単純にテンプレートの実装を置くことができないので

template<typename T> 
Node<T>::Node(T _data) 

は、

Node<T> root 
関連する問題