首页 > 解决方案 > 为什么在我的 C++ 代码中出现未定义的错误引用?

问题描述

<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;
}

我想我在 cpp 中正确地编写了所有方法。
但是,试图做出结果,我收到了这个错误信息。
我不知道为什么会这样。
我想念什么?
有人帮我吗?
编译器:Clang++12

标签: c++linker

解决方案


推荐阅读