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

发布于 2022-09-05 23:05:31 字数 1610 浏览 28 评论 0

我在写自己的的小型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也半天也没找到答案,实在不知道哪错了,望解答!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

相思碎 2022-09-12 23:05:31

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

嘿哥们儿 2022-09-12 23:05:31

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

    vector(InputIterator first, InputIterator last);`

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文