I get this error:
LNK2019 unresolved external symbol "public: class std::list<class cg::Component *,class std::allocator<class cg::Component *> > __thiscall cg::GameObject::getComponentsInChildren<class cg::Component>(int)" (??$getComponentsInChildren@VComponent@cg@@@GameObject@cg@@QAE?AV?$list@PAVComponent@cg@@V?$allocator@PAVComponent@cg@@@std@@@std@@H@Z) referenced in function "protected: void __thiscall cg::Scene::fixedUpdate(void)" (?fixedUpdate@Scene@cg@@IAEXXZ)
So the function getComponentsInChildren which is called inside Scene.cpp is not found.
Here is the call:
#include "Scene.h"
namespace cg {
    ...
    void Scene::update() {
        for (auto i = this->rootObjects->begin(); i != this->rootObjects->end(); i++) {
            std::list<Component*> list = (*i)->getComponentsInChildren<Component>(0);   // <--here
            for (auto j = list.begin(); j != list.end(); j++)
                (*j)->update();
        }
    }
    void Scene::fixedUpdate() {
        for (auto i = this->rootObjects->begin(); i != this->rootObjects->end(); i++) {
            std::list<Component*> list = (*i)->getComponentsInChildren<Component>(0);   // <--here
            for (auto j = list.begin(); j != list.end(); j++)
                (*j)->fixedUpdate();
        }
    }
    ...
}
So I looked inside the GameObject.obj and really there is no symbol containing getComponentInChildren
Here is the GameObject h + cpp
#include <list>
#include "../Export.h"
#include "../Forwarding.h"
#include "RTTI.h"
#include "Scene.h"
#include "Component.h"
#include "../Components/Transform.h"
namespace cg {
    class CGAPI GameObject final {
    public:
        ...
        template<typename T>
        std::list<T*> getComponentsInChildren(int includeInactive);
        ...
    private:
        ...
    };
}
#include "GameObject.h"
namespace cg {
    ...
    template<typename T>
    std::list<T*> GameObject::getComponentsInChildren(int includeInactive) {
        if (!RTTI::isComponent<T>())
            return nullptr;
        std::list<T*> list = getComponents<T>();
        for (auto i = this->transform->begin(); i != this->transform->end(); i++) {
            if (!includeInactive && !(*i)->getGameObject()->isActiveInHierarchy())
                continue;
            list.merge((*i)->getGameObject()->getComponentsInChildren<T>());
        }
        return list;
    }
    ...
}
I really dont understand why the Compiler does not output the function to the obj? Is there something I miss or is the error somewhere else?
