Определение вложенного класса из заголовочного файла

Все еще довольно новый с C++ и пытаюсь поднять это на ступеньку выше. Я хотел бы создать класс Heap с вложенным классом 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++

1 ответ

Если вы используете какой-либо универсальный тип во вложенном классе, вы должны указать шаблон.

template<class T>
class Node

Чтобы определить конструктор класса шаблона вне класса,

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

Объявите участника следующим образом:

Node<T> root
Другие вопросы по тегам