0

<segment_tree.hpp>

#include<vector>
    #include<functional>
    namespace dodam{
        template<typename T> using Operator_type = std::function<T(T, T)>;
    
        template<typename T=int>
        class SegmentTree{
            public:
                explicit SegmentTree() = delete;
                explicit SegmentTree(const size_t& size, const Operator_type<T>& op);
                explicit SegmentTree(const size_t& size, Operator_type<T>&& op = std::plus<T>{});
                explicit SegmentTree(const SegmentTree<T>& obj);
                explicit SegmentTree(SegmentTree<T>&& obj);
                ~SegmentTree();
                SegmentTree& operator=(const SegmentTree<T>& obj);
                SegmentTree& operator=(SegmentTree<T>&& obj);
            private:
                std::vector<T> tree;
                size_t size;    
                Operator_type<T> op;
        };
    };

<segment_tree.cpp>

#include"segment_tree.hpp"
#include<vector>
#include<functional>
#include<algorithm>
#include<memory>

using namespace dodam;

template<typename T>
SegmentTree<T>::SegmentTree(const size_t& size, Operator_type<T>&& op):tree(std::vector<T>(4*size+1)),size(size), op(std::move<Operator_type<T>>(op)){}
template<typename T>
SegmentTree<T>::SegmentTree(const size_t& size, const Operator_type<T>& op):tree(std::vector<T>(4*size+1)), size(size), op(op){}
template<typename T>
SegmentTree<T>::SegmentTree(const SegmentTree<T>& obj):tree(obj.tree),size(obj.size),op(obj.op){}
template<typename T>
SegmentTree<T>::SegmentTree(SegmentTree<T>&& obj):tree(std::move(obj.tree)),size(obj.size),op(std::move(obj.op)){}
template<typename T>
SegmentTree<T>::~SegmentTree()=default;
template<typename T>
SegmentTree<T>& SegmentTree<T>::operator=(const SegmentTree<T>& obj){
    tree = obj.tree;
    size = obj.size;
    op = obj.op;
    return *this;
}
template<typename T>
SegmentTree<T>& SegmentTree<T>::operator=(SegmentTree<T>&& obj){
    tree = std::move(obj.tree);
    size = obj.size;
    op = std::move(obj.op);
    return *this;
}

I think I wrote all methods in cpp correctly.
But, Trying to make result, I recieved this error message.
I don't know why this happen..
What I miss?
Anyone help me?
Compiler : Clang++12

  • Please post all relevant code in the question, not via external links. See [Minimal Reproducible Example](https://stackoverflow.com/help/minimal-reproducible-example) – M.M Sep 12 '21 at 05:38
  • Don't post external links to your code, add a minimal reproducable example here. – Pepijn Kramer Sep 12 '21 at 05:38
  • 1
    see https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file or https://stackoverflow.com/questions/12573816/ – M.M Sep 12 '21 at 05:39

0 Answers0