模板类的构造函数编译时遇到连接错误

新手上路,请多包涵

我在写自己的的小型STL模板库,在写vector的构造函数时遇到连接问题

函数声明与实现如下

template <class T, class Alloc = allocator<T>>
    class vector {
    public:
        typedef T                value_type;
        typedef T*                iterator;
        typedef T&                reference;
        typedef iterator        pointer;
        typedef size_t            size_type;
        typedef ptrdiff_t        difference_type;

    private:
        iterator    start;
        iterator    finish;
        iterator    end_of_storage;
        typedef        Alloc        date_allocator;
    public:            //构造析构相关
        vector() :start(0), finish(0), end_of_storage(0) {}
        explicit vector(const size_type n);
        vector(const size_type n, const T& value);
..............

两个构造函数实现如下

template <class T, class Alloc>
    vector<T, Alloc>::vector(const size_type n) {
        allocate_and_fill(n, value_type());
    }

template <class T, class Alloc>
vector<T, Alloc>::vector(const size_type n, const T& value) {
    allocate_and_fill(n, value);
}

单元测试代码如下

void test_case1() {
        myVec<int> v1(10);
        //myVec<int> v2(10, 8);
        assert(v1.size() == 10);

        mySTL::test::container_print(v1);
}

第二个构造函数编译时遇到如下错误
图片描述

当把第二个构造函数注释后能编译通过并且正常运行

编程新手,google也半天也没找到答案,实在不知道哪错了,望解答!

阅读 5.5k
2 个回答

没看出什么问题,有可能的话贴出完整代码。
另外确保模板的申明和定义都放在.h头文件中,不要把模板的定义分开放在.cc或.cpp中。

新手上路,请多包涵

感觉大家的回答!我的类声明文件里还有一个构造函数
`template <class InputIterator>

    vector(InputIterator first, InputIterator last);`

不过并未写此函数的实现,我把这个声明注释后能编译通过,我猜编译器可能是针对这个函数特化了?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题